SpringBoot实战6-Spring基础-Scope

SpringBoot实战6-Spring基础-Scope上篇我们通过 SpringBoot 实战 5 Spring 基础 配置与注入 学习来 Bean 的配置和注入的知识 本篇学习 Bean 的 Scope 2 5 Bean 的 Scope 容器中的 Bean 的 Scope 指的是 Bean 的实例在容器中创建的方式

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

SpringBoot实战6-Spring基础-Scope

2.5 Bean的Scope

容器中的Bean的Scope指的是Bean的实例在容器中创建的方式。在容器中默认是singleton,整个容器中只创建一个Bean的实例。常用的还有prototype,每次请求Bean时都会创建一个实例。我们可以通过@Scope注解来设置Scope。在本文我们只讲解常用的singletonprototype。

下面两种方式是相同的:

@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实战6-Spring基础-Scope

下一篇《SpringBoot实战7-Spring基础-生命周期》

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

(0)
上一篇 2025-07-08 13:10
下一篇 2025-07-08 13:20

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信