通过注解方式使用自定义的作用域,使用场景是啥呢

通过注解设定Bean的作用域








代码总结(方法注入)
方法注入(注解形式)
只需在定义的create的虚方法函数上加上@Lookup。
代码总结(方法注入)
方法注入(xml形式)
先在Bean类中加入一个create的虚方法函数,然后在spring.xml中加入<lookup-method />标签,加上刚刚定义的虚方法函数名。
代码总结(自定义作用域)
注解形式,所需编写的Configuration类的内容
第一步,定义的MyScope作用域加上@Bean,交由Spring来管理。
第二步,调用customScopeConfigurer的构造函数,将自定义的MyScope,添加进去。
第三步,在Bean的构造函数中,加上@Scope("MyScope")注解,使其使用自定义的作用域。
代码总结(自定义作用域)
xml形式,所需编写的spring.xml中需要添加的内容
代码总结(自定义作用域)
自定义作用域类
自定义作用域的类的编写 (详细参考2-5自定义作用域)
代码总结(自定义作用域)
Spring自定义作用域的两种方式
xml形式
注解形式
课程内容结构图
方法注入之注解形式
方法注入之xml形式
自定义作用域3之注解形式
自定义作用域2之xml形式
自定义作用域1
spring预定义作用域
@Configuration:可以看成是Spring.xml文件
@ComponentScan("com....包路径"):扫描该路径下所有的class
将Java类交由Spring管理的两种方法:1、在@Configuration的类下创建一个public的方法return管理的类,并添加@Baen注解;2、在需要管理的类 上加入@Component注解。
@Scope(""):添加作用域。singleton:单例模式
自定义的MyScope:

xml形式的自定义作用域:

注解形式的自定义作用域:

方法注入:
xml形式方法注入:

注解形式注入:

@Configuration:可以看成是Spring.xml文件
@ComponentScan("com....包路径"):扫描该路径下所有的class
将Java类交由Spring管理的两种方法:1、在@Configuration的类下创建一个public的方法return管理的类,并添加@Baen注解;2、在需要管理的类 上加入@Component注解。
@Scope(""):添加作用域。singleton:单例模式
Bean的作用域
Bean的作用域
@Scope指定作用域(单例,多例等)
再设置CustomScopeConfigurer
@lookup可通过虚方法注入Bean
注解形式进行自定义作用域
自定义作用域xml形式和注解形式
spring预定义作用域
通过注解设定Bean的作用域Scope
一、Singleton作用域、prototype作用域、Web环境作用域(request作用域、session作用域、application作用域、websocket作用域)
@Scope(value=""):实现实例化Bean的作用域功能。
实现Bean的多例模式:
Bean代码:
@Component(value="bean1")
@Scope(value="prototype")
public class Bean11 {
}
Configuration代码:
@Configuration
@ComponentScan("springscope")
public class Configuration11 {
@Bean(name="bean2")
@Scope(value="prototype")
public Bean11 getBean(){
return new Bean11();
}
}
测试代码:
@Test
public void test(){
ApplicationContext ac=new AnnotationConfigApplicationContext(Configuration11.class);
for(int i=0;i<10;i++){
Bean11 bean=ac.getBean("bean1", Bean11.class);
System.out.println(bean);
}
System.out.println("=================================");
for(int i=0;i<10;i++){
Bean11 bean1=ac.getBean("bean2",Bean11.class);
System.out.println(bean1);
}
}
结果:
springscope.Bean11@7cd3258f
springscope.Bean11@a470f4f
springscope.Bean11@3f3e10ce
springscope.Bean11@3c164d2
springscope.Bean11@dc218eb
springscope.Bean11@41f1f35b
springscope.Bean11@739ffd2f
springscope.Bean11@ca753f7
springscope.Bean11@3d79839e
springscope.Bean11@74b01999
=================================
springscope.Bean11@672add5f
springscope.Bean11@2f2bbce3
springscope.Bean11@607df346
springscope.Bean11@6ceeaa27
springscope.Bean11@28e51e50
springscope.Bean11@5a292b29
springscope.Bean11@44d0befd
springscope.Bean11@64aaf756
springscope.Bean11@145462bc
springscope.Bean11@301e2f11
二、自定义作用域
步骤1:根据spring.xml中自定义作用域配置,应该先实例化MyScope,所以先通过注解方式来实例化MyScope。
代码:
@Bean
public MyScope myScope(){
return new MyScope();
}
步骤2:根据spring.xml中自定义作用域配置,通过注解再实例化一个CustomScopeConfigurer,再通过该对象的addScope(String scopeName,Scope scope)方法来实现xml中的<map>标签的功能。
代码:
@Bean
public CustomScopeConfigurer customScopeConfigurer(){
CustomScopeConfigurer csc=new CustomScopeConfigurer();
csc.addScope("myScope",myScope());
return csc;
}
问题:CustomScopeConfigurer该对象没有addScope方法。
通过注解实现方法注入:(Bean的作用域为singleton,AnotherBean的作用域为prototype?)?
Spring通过注解形式添加作用域:
方法注入——注解形式
自定义作用域——注解形式
自定义作用域
Spring预定义作用域
@Scope 指定Bean的作用域
@Bean 定义一个Bean
@ComponentScan("包路径") 开启包扫描