释义
@Scope注解是springIoc容器的作用域定义,分为五种
single单例模式 -- 默认prototype原型模式 -- 每次获取bean的时候产生新的实例request-- 每次http请求产生一个新的bean,生命周期仅存在于这次requestsession-- 每次http请求产生一个新的bean,生命周期仅存在于这次sessionglobalsession-- 类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的web应用中才有意义
以上从其他帖子抄的,仅验证single和prototype
使用
single
@Bean
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
public DemoDTO user() {
return new DemoDTO("Rick.Tu", ThreadLocalRandom.current().nextInt());
}
prototype
@Bean
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE, proxyMode = ScopedProxyMode.TARGET_CLASS)
public DemoDTO user() {
return new DemoDTO("Rick.Tu", ThreadLocalRandom.current().nextInt());
}
两种不同的写法 同时请求三次的结果展示
//singleton
{"name":"Rick.Tu","age":1944884837}
{"name":"Rick.Tu","age":1944884837}
{"name":"Rick.Tu","age":1944884837}
//prototypee
{"name":"Rick.Tu","age":873358591}
{"name":"Rick.Tu","age":-583022256}
{"name":"Rick.Tu","age":472670033}
说明
- 当
singleton bean依赖了prototype bean时,因为singleton bean仅在服务启动中初始化,所以也就只调用一次prototype bean,所以不会有新的prototype bean生成,可以像上面👆一样注解中加proxyMode = ScopedProxyMode.TARGET_CLASS singleton bean的生命周期是spring维护的,prototype bean的生命周期需要自己维护,spring只负责创建