简单介绍@Scope注解

118 阅读1分钟

释义

@Scope注解是springIoc容器的作用域定义,分为五种

  • single单例模式 -- 默认
  • prototype 原型模式 -- 每次获取bean的时候产生新的实例
  • request -- 每次http请求产生一个新的bean,生命周期仅存在于这次request
  • session -- 每次http请求产生一个新的bean,生命周期仅存在于这次session
  • globalsession -- 类似于标准的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只负责创建