标签:
我想大家都知道struts2默认就是多例的,而spring默认都是例的,如果二者集成,那action会是单例还是多例呢?
首先我们先回顾一下struts2和spring的两种整合方式:
1. 由spring来创建和管理action,即在action上增加@Controller注解,如果是xml方式的话,就是在spring中增加action的配置,而在struts2的xml中,配置的class的直接指向spring中的配置类,如
<bean id=”LoginAction” class=”yaso.struts.action.LoginAction”> <property name=”loginDao” ref=”LoginDao”/> </bean>
<action name=”LoginAction” class=”LoginAction”> <result name=”success”>/index.jsp</result> </action>
2. 由struts2自己创建action,然后注入spring的bean, 这种你会看不到struts2和spring有什么关联,struts2的插件会自己注入依赖,不需要在action上增加@Controller注解。只是这种方式因为action脱离了spring的控制,如果要使用spring的一些特性可能就不行了。
基于这两种方式,我做了个实验,因为我是注解方式的,xml的方式没有试,采用注解方式,不管怎么配置, 我发现action始终是多例的
1. 什么注解都不加,action是多例
2. 只增加@Controller,action是多例
3. 只增加@Scoped(Scope.SINGLETON), 还是多例
4. 只增加@org.springframework.context.annotation.Scope(ConfigurableBeanFactory.SCOPE_SINGLETON) 还是多例
5. 同时增加这Scope和Scoped,还是多例
6. 增加@controller 和 Scope , 还是多例
有人说如果是xml方式和spring整合,并且由spring产生action,一个要加scope="prototype" , 因为spring是单例的,这个我没有试,但是用注解方式,就一定不会是单例, 这个我试过。
不知道是不是我哪里配置有问题,我感觉这样的结果很不合理,如果总是多例,那这个Scope还有什么意义呢?
标签:
原文地址:http://blog.csdn.net/fireofjava/article/details/45619367