Spring Bean 的 scope属性为何要设置为prototype

xiaoxiao2021-02-28  93

<bean id = "testAction" class = "com.kewen.xxxAction" scope = "prototype"/> Spring Bean中为何有的地方要将scope属性设为prototype?  先简单说一下两个属性值:  1.Spring中Bean的配置,如果不显式指明scope的值,那么默认为单例singleton。也就是说这个Bean只会新建一个实例。  2.设置为prototype之后,就会创建多个实例,可以理解为会new很多次。而singleton只会new一个实例  准确的说,每次spring要获取bean的时候,都会调用getBean()方法  如果这个bean是singleton,那就会取唯一的一个实例出来  如果是prototype,那么每次getBean(),都会new一个新实例 

举两个简单的例子对比一下:

Class TestAction{ private int age; } 每次请求都会传age过来,如果这个Action是个单例的话,后面请求的age,就把前面的给覆盖了,所以必须设置成prototype 

class TestService{ @Autowired private IUserDAO dao; } 由于它没有实例变量,所以不存在冲突的问题,用默认的单例就可以了  总结一下  1.对于有实例变量的类,要设置成prototype;没有实例变量的类,就用默认的singleton  2.Action一般我们都会设置成prototype,而Service只用singleton就可以。 

转载请注明原文地址: https://www.6miu.com/read-63068.html

最新回复(0)