概述
1、Spring容器创建:(web.xml中配置)
<!-- spring配置文件--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>WEB-INF/classes/com/zjy/gpx/config/applicationContext*.xml</param-value> </context-param> <!-- Spring监听器,随web应用启动初始化Spring容器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
2、action创建的两种方式,第一种由Spring负责管理:
struts.xml文件中
<!-- spring来管理action对象的创建 --> <constant name="struts.objectFactory" value="spring" /> <!-- 省,市,县地区选择 --> <action name="city_*" class="coreCityAction" method="{1}"> <result name="success">/success.jsp</result> <result name="error">/error.jsp</result> </action>
applicationContext文件中:
<bean id="coreCityAction" class="com.zjy.gpx.struts.CoreCityAction"> <property name="coreCityService" ref="coreCityService" /> </bean>
这里是通过Spring来负责创建Action对象,这个工作是通过Struts2提供的Spring插件struts-spring-plugin完成的,插件文档地址:http://struts.apache.org/release/2.0.x/docs/spring-plugin.html
struts.xml文件中action配置的class属性对应spring配置文件中Bean的id名,当struts2将请求转发给指定的Action时,struts.xml中的Action就是个“伪”Action,因为它的class属性不是一个真实的类,而它指定的是spring容器中Action实例的id。
注意:由Spring负责创建action对象的时候一般要加上scope属性,比如:scope = "prototype",因为spring默认生成的Bean是单例的,而struts2负责生成的action是多例的,每个action值栈中都对应一个请求存放不同的局部变量,所以这里需要加上scope属性。
这种方式不足之处:必须把所有action配置在spring中,而且struts.xml还要写生一个伪action,导致配置文件臃肿;
3、第二种方式:Spring的自动装配,Action会自动从Spring容器中获取逻辑层组件(service)
struts.xml文件(和未整合前一致)
<action name="relogin" class="com.xxt.user.action.LoginAction"> <result name="input" type="freemarker">/login/index.ftl</result> <result name="error" type="freemarker">/error.ftl</result> </action>
applicationContext文件中:(一个简单的Bean)
<bean id="loginService" class="com.xxt.user.service.impl.LoginServiceImpl"> <property name="dbs" ref="dbs"></property> </bean>
action方法中有LoginServiceImpl loginService = null;然后setter()方法。
基本流程是这样的,这种情况还是由Struts2自己创建Action对象,创建后的对象会去Spring容器中寻找它成员变量对应的Bean,默认的自动装配策略是按照名字来匹配的。
通过设置struts.objectFactory.spring.autoWire常量来改变Spring装配策略。几个常用的值:
name、type、auto、constructor,这个和Spring自身的转配策略是相同的。
这种方式优点:struts.xml文件和未整合前是一致的,主要是要在spring配置文件中定义逻辑层的Bean,相比前一种好处就是简化配置文件。
缺点:如果采用默认自动装配策略,action类中的成员变量名要和spring中Bean id名保持一致,且代码可读性差些。
由spring创建action对象的好处??
最后
以上就是激动小蝴蝶为你收集整理的Struts2+Spring整合后Action对象创建方式的全部内容,希望文章能够帮你解决Struts2+Spring整合后Action对象创建方式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复