1,用Spring架构,及Struts2-spring-plugin插件
导入Spring的dist全部所需的jar包 Struts2的spring插件 struts2-spring-plugin.XX.jar struts2的核心包 struts2-core.XX.jar xwork- core.XX.jar commons.logging.XX.jar ...根据需要选择导入
2,配置web.xml中applicationContext.xml的参数路径及侦听器
<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <!-- 采用Listener完成Spring容器的初始化 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
3,Sturts2的Action配置(struts.xml 和 applicationContext.xml)
Spring管理控制器 容易导致文件冗余
第一种 将Action配置到Spring的配置文件中,通过Bean的id来加载 <action name="loginPro" class="loginAction">....
<bean id="loginAction" class="com.tk.web.action.LoginAction" scope="prototype" p:ms-ref="myService"/>
自动装配 耦合较高
Spring插件自动装配,struts.objectFactory.spring.autoWire 在struts.xml文件中指定常量
<constant name="struts.objectFactory.spring.autoWire" value="方式值"/>
方式值:
name:根据属性名装备。Spring插件会查找容器中的全部Bean,找出其中id属性与Action所需的业务逻辑组件
同名的Bean,将该Bean实例注入到Action实例。
type:根据属性类型自动装配。Spring插件会查找容器中全部Bean,找出其类型恰好与Action所需的业务
逻辑组件相同的Bean,将该Bean实例注入到Action实例。如果有多个这样的Bean,就抛出一个致命异
常,如果没有匹配的Bean,则什么都不会发生,属性也不会被设置。
auto:Spring插件会自动检测需要使用的哪种自动装配方式
constructor:与type类似,区别是constructor使用构造器来构造注入所需的参数,而不是使用设值注入方式
第二种 因为使用自动装配,Spring插件创建Action实例时,是根据配置Action的class属性指定实现类来创建Action实例的
配置文件与不整合Spring的配置文件没有任何区别,
<action name="loginPro" class="com.tk.web.action.LoginAction">
区别在于:
不整合:Struts2负责创建该Action实例,创建成功后就结束
整合Spring框架:由Spring插件负责创建该Action实例,创建成功后,还需要将该Action所需的业务逻辑组件,注入给该Action实例。