大家好,欢迎来到IT知识分享网。

2.5 Bean的Scope
容器中的Bean的Scope指的是Bean的实例在容器中创建的方式。在容器中默认是singleton,整个容器中只创建一个Bean的实例。常用的还有prototype,每次请求Bean时都会创建一个实例。我们可以通过@Scope注解来设置Scope。在本文我们只讲解常用的singleton和prototype。
下面两种方式是相同的:
@Service public class ScopeService { }
@Service @Scope(BeanDefinition.SCOPE_SINGLETON) //与@Scope("singleton")相同 public class ScopeService { }
我们使用@Scope(
BeanDefinition.SCOPE_PROTOTYPE)来指定Scope为prototype
@Service @Scope(BeanDefinition.SCOPE_PROTOTYPE) //与@Scope("prototype")相同 public class ScopeService2 { }
我们除了可以在方法上注解@Scope,也可以在@Bean的类上注解@Scope,如我们对类:
public class ScopeService3 { }
在JavaConfig中配置:
@Bean @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) //与@Scope("prototype")相同 public ScopeService3 scopeService3(){ return new ScopeService3(); }
这时我们在ScopeInjectService Bean中分别给上面三个Bean注入两次,判断相同类型的两个注入是否相等:
@Service public class ScopeInjectService { private ScopeService scopeService; private ScopeService scopeService1; private ScopeService2 scopeService2; private ScopeService2 scopeService21; private ScopeService3 scopeService3; private ScopeService3 scopeService31; //只有一个构造器,此处可省略@Autowired public ScopeInjectService(ScopeService scopeService, ScopeService scopeService1, ScopeService2 scopeService2, ScopeService2 scopeService21, ScopeService3 scopeService3, ScopeService3 scopeService31) { this.scopeService = scopeService; this.scopeService1 = scopeService1; this.scopeService2 = scopeService2; this.scopeService21 = scopeService21; this.scopeService3 = scopeService3; this.scopeService31 = scopeService31; } public void validateScope(){ System.out.println(scopeService.equals(scopeService1));//容器内只有一个实例,所以相等 System.out.println(scopeService2.equals(scopeService21));//请求注入创建新的实例,不相等 System.out.println(scopeService3.equals(scopeService31));//请求注入创建新的实例,不相等 } }
在JavaConfig执行:
@Bean CommandLineRunner scopeClr(ScopeInjectService scopeInjectService){ return args -> { scopeInjectService.validateScope(); }; }
输出结果是:

下一篇《SpringBoot实战7-Spring基础-生命周期》
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/182756.html