spring配置文件方式整合
1. 导入struts2的插件包
导入spring-web-3.2.9.jar2. 把所有的struts2的action,当成bean来管理
3. Spring整合Struts,使用的IOC容器是WebApplicationContext
修改web.xml,tomcat启动时加载beans.xml
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:beans.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
public class ContextLoaderListener extends ContextLoader implements ServletContextListener {}
public ContextLoaderListener(WebApplicationContext context) {}
4、配置bean对象之间的依赖注入
注意:Spring所有bean对象,默认是单例模式
但是struts2的action不能使用单例,应该使用prototype模式
bean对象的scope : singleton (默认)
prototype --- 非单例模式
request,session ,global session 和web层耦合了,不建议使用
@Component = @Controller + @Service + @Repository
beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
</bean>
<bean id="bookDao" class="com.icss.dao.hib.BookHibDao">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="userDao" class="com.icss.dao.hib.UserHibDao">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="bookBiz" class="com.icss.biz.hib.BookHibBiz">
<property name="bookDao" ref="bookDao"></property>
</bean>
<bean id="userBiz" class="com.icss.biz.hib.UserHibBiz">
<property name="bookDao" ref="bookDao"></property>
<property name="userDao" ref="userDao"></property>
</bean>
<bean id="bookAction" class="com.icss.control.BookAction" scope="prototype">
<property name="bookBiz" ref="bookBiz"></property>
</bean>
<bean id="userAction" class="com.icss.control.UserAction" scope="prototype">
<property name="bookBiz" ref="bookBiz"></property>
<property name="userBiz" ref="userBiz"></property>
</bean>
<bean id="shopCarAction" class="com.icss.control.ShopCarAction" scope="prototype">
<property name="bookBiz" ref="bookBiz"></property>
</bean>
<bean id="adminAction" class="com.icss.control.back.AdminAction" scope="prototype">
<property name="bookBiz" ref="bookBiz"></property>
<property name="userBiz" ref="userBiz"></property>
</bean>
<!-- 事务管理器 -->
<bean id="txManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 切面设置 -->
<aop:config>
<aop:pointcut id="serviceMethod" expression="execution(* com.icss.biz.*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod" />
</aop:config>
<!-- 切面策略 -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="checkoutOk*" propagation="REQUIRED" rollback-for="Throwable" />
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice>
</beans>
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.i18n.encoding" value="utf-8"></constant>
<package name="YouKeModel" extends="struts-default" namespace="/" >
<action name="book_*" class="bookAction" method="{1}">
<result name="getAllBooksOK">/WEB-INF/main/main.jsp</result>
<result name="error">/error.jsp</result>
<result name="getBookDetailOK">/WEB-INF/main/BookDetail.jsp</result>
</action>
<action name="user_*" class="userAction" method="{1}">
<result name="loginGET">/WEB-INF/main/login.jsp</result>
<result name="loginOK" type="chain">book_getAllBooks</result>
<result name="loginFail">/WEB-INF/main/login.jsp</result>
<result name="logoutOK" type="redirectAction">book_getAllBooks</result>
<result name="error">/error.jsp</result>
</action>
</package>
<package name="UserModel" extends="struts-default" namespace="/user" >
<action name="shopCar_*" class="shopCarAction" method="{1}">
<result name="shopCarAddOK" type="chain">shopCar_shopCarDisplay</result>
<result name="shopCarDisplayOK">/WEB-INF/main/shopCar.jsp</result>
<result name="shopCarRemoveOK" type="chain">shopCar_shopCarDisplay</result>
<result name="loginPlease">/WEB-INF/main/login.jsp</result>
<result name="error">/error.jsp</result>
</action>
<action name="user_*" class="userAction" method="{1}">
<result name="checkOutOK">/WEB-INF/main/CheckOut.jsp</result>
<result name="payMoneyOK">/WEB-INF/main/CheckoutOk.jsp</result>
<result name="loginPlease">/WEB-INF/main/login.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
<package name="AdminModel" extends="struts-default" namespace="/admin" >
<action name="admin_*" class="adminAction" method="{1}">
<result name="buyInfoDisplayOK">/WEB-INF/back/BuyInfoList.jsp</result>
<result name="bookAddOK">/WEB-INF/back/BookAdd.jsp</result>
<result name="bookAddGET">/WEB-INF/back/BookAdd.jsp</result>
<result name="error">/error.jsp</result>
<result name="input">/error/FileUploadError.jsp</result>
<interceptor-ref name="fileUpload">
<param name="allowedTypes">image/bmp,image/png,image/jpeg</param>
<param name="maximumSize">102400</param>
</interceptor-ref>
<interceptor-ref name="defaultStack" />
</action>
</package>
</struts>