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

<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就可以。 

猜你喜欢

转载自blog.csdn.net/xiao__miao/article/details/77764271