Spring入门(五):Spring Bean Scope讲解
程序员文章站
2022-05-26 14:26:08
1. 前情回顾 "Spring入门(一):创建Spring项目" "Spring入门(二):自动化装配bean" "Spring入门(三):通过JavaConfig装配bean" "Spring入门(四):使用Maven管理Spring项目" 2. 什么是Bean的Scope? Scope描述的是S ......
1. 前情回顾
2. 什么是bean的scope?
scope描述的是spring容器是如何新建bean的实例的。
spring常用的scope有以下几种,通过@scope注解来实现:
- singleton:一个spring容器中只有一个bean的实例,即全容器共享一个实例,这是spring的默认配置。
- prototype:每次调用新建一个bean的实例。
- request:web项目中,给每一个http request新建一个bean实例。
- session:web项目中,给每一个http session新建一个bean实例。
3. 示例
为了更好的理解,我们通过具体的代码示例来理解下singleton与prototype的区别。
3.1 新建singleton类型的bean
package scope; import org.springframework.stereotype.service; @service public class demosingletonservice { }
因为spring默认配置的scope是singleton,因此以上代码等价于以下代码:
package scope; import org.springframework.context.annotation.scope; import org.springframework.stereotype.service; @service @scope("singleton") public class demosingletonservice { }
3.2 新建prototype类型的bean
package scope; import org.springframework.context.annotation.scope; import org.springframework.stereotype.service; @service @scope("prototype") public class demoprototypeservice { }
3.3 新建配置类
package scope; import org.springframework.context.annotation.componentscan; import org.springframework.context.annotation.configuration; @configuration @componentscan("scope") public class scopeconfig { }
3.4 测试
新建一个main类,在main()方法中,分别从spring容器中获取2次bean,然后判断bean的实例是否相等:
package scope; import org.springframework.context.annotation.annotationconfigapplicationcontext; public class main { public static void main(string[] args) { annotationconfigapplicationcontext context = new annotationconfigapplicationcontext(scopeconfig.class); demosingletonservice s1 = context.getbean(demosingletonservice.class); demosingletonservice s2 = context.getbean(demosingletonservice.class); demoprototypeservice p1 = context.getbean(demoprototypeservice.class); demoprototypeservice p2 = context.getbean(demoprototypeservice.class); system.out.println("s1 与 s2 是否相等:" + s1.equals(s2)); system.out.println("p1 与 p2 是否相等:" + p1.equals(p2)); context.close(); } }
运行结果如下:
从运行结果也可以看出,默认情况下即singleton类型的bean,不管调用多少次,只会创建一个实例。
4. 注意事项
singleton类型的bean,@scope注解的值必须是:singleton。
prototype类型的bean,@scope注解的值必须是:prototype。
即使是大小写不一致也不行,如我们将demoprototypeservice类的代码修改为:
package scope; import org.springframework.context.annotation.scope; import org.springframework.stereotype.service; @service @scope("prototype") public class demoprototypeservice { }
此时运行代码,就会报错:
5. 源码
源码地址:,欢迎下载。
6. 参考
《java ee开发的颠覆者:spring boot实战》
欢迎扫描下方二维码关注公众号:申城异乡人。
上一篇: Python 中的Selenium异常处理实例代码
下一篇: 循环结构 :do-while
推荐阅读
-
Spring Boot 入门(五):集成 AOP 进行日志管理
-
Spring入门(五):Spring Bean Scope讲解
-
Spring入门(十二):Spring MVC使用讲解
-
spring cloud 入门系列五:使用Feign 实现声明式服务调用
-
为什么整合Spring与Struts2的时候,必须定义Struts2 Bean的Scope
-
Spring入门(二):自动化装配bean
-
Spring入门(十三):Spring MVC常用注解讲解
-
Spring Cloud入门实战(五)------配置中心
-
Mybatis入门实例(五)——MyBatis与Spring 3.X的整合
-
【Spring入门-01】Bean