首页 理论教育 Java服务端研发知识图谱:Bean作用域

Java服务端研发知识图谱:Bean作用域

时间:2023-11-22 理论教育 版权反馈
【摘要】:上一节学习了如何实例化Bean以及如何进行注入,那么Spring生成的Bean是单例模式[5]的还是原型模式[6]的呢?这里调用两次getBean方法,比较两个Bean是否相同,修改之前的测试用例如下:运行结果如下:product==product2 is true可以发现Spring默认注入的Bean是单例模式的。可以通过设置bean标签里面的scope属性,指定Bean的作用域。如果Bean被设置成prototype作用域,程序每次请求该id的Bean,Spring都会新建一个Bean实例,然后返回。

Java服务端研发知识图谱:Bean作用域

学习本节之前,需要弄明白什么是作用域。作用域(scope),简单来说是指Spring容器中POJO的生命周期,也可以理解为对象在Spring容器中的创建方式。

上一节学习了如何实例化Bean以及如何进行注入,那么Spring生成的Bean是单例模式[5]的还是原型模式[6]的呢?

这里调用两次getBean方法,比较两个Bean是否相同,修改之前的测试用例如下:

978-7-111-61011-3-Part02-16.jpg

运行结果如下:

product==product2 is true

可以发现Spring默认注入的Bean是单例模式的。可以通过设置bean标签里面的scope属性,指定Bean的作用域。

<bean name="beanName"scope=”XXX”class="xxx"></bean>

scope属性常用singleton和prototype两种属性值。对于singleton作用域的Bean,每次请求该Bean都将获得相同的实例,即平时说的单例模式的Bean。如果Bean被设置成prototype作用域,程序每次请求该id的Bean,Spring都会新建一个Bean实例,然后返回。作用域的含义见表5-2。

5-2 作用域(www.xing528.com)

978-7-111-61011-3-Part02-17.jpg

基于定义的Product类,实现singleton和prototype两种作用域的Bean。XML配置如下:

978-7-111-61011-3-Part02-18.jpg

978-7-111-61011-3-Part02-19.jpg

通过上面设置的两种类型的bean来获取Bean实例。测试类核心代码如下:

978-7-111-61011-3-Part02-20.jpg

运行结果如下:

scope default productOne==productTwo is true

scope prototype productOne==productTwo is false 通过bean的scope属性,可以灵活控制Bean的作用域来应对不同的业务场景。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈