<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!--
1.配置dataSource
-->
<!-- 1.1 加载properties配置文件 -->
<context:property-placeholder location="classpath:dbinfo.properties"/>
<!-- 1.2 配置DataSource c3p0 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="user" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
<!-- 2.配置dao -->
<bean id="bookDao" class="com.itqf.dao.impl.BookDaoImpl">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 3.配置service -->
<bean id="bookService" class="com.itqf.service.impl.BookServiceImpl">
<!--
name的值: BookServiceImpl 的set方法方法名一致(首字母小写)
-->
<property name="bookDao" ref="bookDao"></property>
</bean>
<!-- 4.配置action -->
<bean id="bookAction" scope="prototype" class="com.itqf.web.action.BookAction">
<property name="bookService" ref="bookService"></property>
</bean>
<!-- 5.配置事务 -->
<!-- 5.1 配置事务的管理器 -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 5.2 事务的详情 -->
<tx:advice id="myAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<!-- 5.3 把事务织入到目标方法前后 -->
<aop:config>
<aop:advisor advice-ref="myAdvice" pointcut="execution(* com.itqf.service.impl.*.*(..))"/>
</aop:config>
<!-- 等价 -->
<!-- <aop:config>
<aop:pointcut expression="execution(* com.itqf.service.impl.*.*(..))" id="myPintCut"/>
<aop:advisor advice-ref="myAdvice" pointcut-ref="myPintCut"/>
</aop:config> -->
</beans>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<!-- 不使用spring前的写法 Action的创建时struts自己创建的 -->
<!-- <action name="show" class="com.itqf.web.action.BookAction" >
<result>/showList.jsp</result>
</action> -->
<!-- 跟spring整合后 action的创建交给了spring来创建
class="" 的值是spring的配置文件(applicationContext.xml)中action的id
-->
<action name="show" class="bookAction">
<result>/show.jsp</result>
</action>
</package>
</struts>
<!-- 1,struts的核心控制器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 2,spring的配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- 3.spring的监听 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>