Spring bean的单利模式和非单利模式

来源:互联网 发布:泰伦斯·琼斯cba数据 编辑:程序博客网 时间:2024/05/03 21:30

         Spring Bean默认情况下所有bean是单一的,即单利模式。代码中表示:<bean id=“myBean” class="。。。" scope="singleton"/>。singleton表示spring容器中只会创建一个叫做myBean的Bean对象。所有的对该bean的请求都由该对象来处理,这个bean对象就是共享的,就是说这个bean是非线程安全的。既然如此那我们的三层框架的service和dao层中由容器注入的bean不都是非线程安全的吗?这样不是会出问题吗?答案是那些bean中没有使用全局变量,也就是说没有共享的数据,所以我们可以不用去管它。若是有了共享数据,那为了线程安全,我们可以设置singleton=“false”来保证其安全性。

        什么时候我们会经常使用非单利的bean呢?是在将action交给spring管理的时候,容器生成的action的bean就是非单利的。在struts.xml(Struts2)中配置如下:<constant name="struts.objectFactory" value="spring" />(Struts1不知道如何配置)。由容器管理action的bean还需要一个配置,那就是scope=“prototype”。这样的话,这样的话页面每次请求一个action的bean就会产生一个新的对象来处理用户的请求。这样就保证了其线程安全性。

 

对于以上问题,也可以参考如下三个解释:

1,http://www.juziku.com/zhouchao/wiki/4036.htm,

2,http://blog.csdn.net/mastermind/article/details/1932787

3,《Spring in Action 中文版 第二版》第二章的2.5小节:控制bean的初始化(2.5.1 Bean的范围化)

原创粉丝点击