1.创建一个java maven web项目,在pom.xml导入对应的核心架包
<!-- mysql核心架包 -->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- Hibernate核心架包 -->
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.32.Final</version>
</dependency>
<!-- junit核心架包 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!-- spring核心架包 -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>5.2.9.RELEASE</version>
</dependency>
<!-- struts核心架包 -->
<!-- https://mvnrepository.com/artifact/org.apache.struts/struts2-core -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.26</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.5.26</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.7</version>
<scope>runtime</scope>
</dependency>
2.创建applicationcontext.xml配置数据源 连接数据库
<!-- 配置数据源 -->
<bean
class="org.springframework.jdbc.datasource.DriverManagerDataSource"
id="dataSource1">
<property name="driverClassName"
value="com.mysql.jdbc.Driver"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
<property name="url"
value="jdbc:mysql://localhost:3306/hr?useUnicode=true&characterEncoding=utf-8"></property>
</bean>
配置sessionfection
<bean
class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"
id="sessionFactory1">
<property name="dataSource" ref="dataSource1"></property>
<property name="annotatedClasses">
<list>
<!-- 声明对象 -->
<value>com.lanxin.Bean.Emp</value>
<value>com.lanxin.Bean.Dept</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
</bean>
3.封装对应方法,在applicationcontext.xml中配置
<!-- 配置Dao -->
<bean class="com.lanxin.Dao.EmpDaoImpl" id="empDaoImpl">
<property name="sessionFactory" ref="sessionFactory1">
</property>
</bean>
<bean class="com.lanxin.Dao.DeptDaoImpl" id="deptDaoImpl">
<property name="sessionFactory" ref="sessionFactory1">
</property>
</bean>
4.声明事务
声明前事务(实现MethodBeforeAdvice接口,before方法)
public class MyBeroreAdvice implements MethodBeforeAdvice {
public void before(Method method, Object[] args, Object target) throws Throwable {
// TODO Auto-generated method stub
}
}
声明后事务(实现AfterReturningAdvice接口,afterReturning方法)
public class MyAfterAdvice implements AfterReturningAdvice {
public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {
// TODO Auto-generated method stub
}
}
声明环绕事务即前后(实现MethodInterceptor接口,invoke方法)
public class MyAroundAdvice implements MethodInterceptor {
public Object invoke(MethodInvocation invocation) throws Throwable {
// TODO Auto-generated method stub
return null;
}
}
5.在applicationcontext.xml中配置
<bean class="com.lanxin.Advice.MyAfterAdvice" id="myAfterAdvice">
</bean>
<bean class="com.lanxin.Advice.MyAroundAdvice" id="myAroundAdvice">
</bean>
<bean class="com.lanxin.Advice.MyBeroreAdvice" id="myBeroreAdvice">
</bean>
6.配置自动代理(org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator)
<!-- 自动代理(类) -->
<bean
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="interceptorNames">
<list>
<value>myBeroreAdvice</value><!-- 代理 -->
</list>
</property>
<property name="beanNames">
<list><!-- 只代理以Impl结尾的dao -->
<value>*Impl</value>
</list>
</property>
</bean>
事务管理器(只有hibernate使用HibernateTransactionManager)
<!-- 事务管理器 -->
<bean
class="org.springframework.orm.hibernate5.HibernateTransactionManager"
id="transactionManager">
<property name="sessionFactory" ref="sessionFactory1"></property>
</bean>
流行用法
<!-- 通知 -->
<tx:advice id="txAdvice"
transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="select*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
<!-- aop切面 -->
<aop:config>
<aop:advisor advice-ref="txAdvice"
pointcut="execution(* com.lanxin.Dao.*.*(..))" />
<aop:advisor advice-ref="myAroundAdvice"
pointcut="execution(* com.lanxin.Dao.*.*(..))" />
</aop:config>
6.编写action,配置struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<package name="s" extends="struts-default">
<action name="emp_*" method="{1}" class="empAction">
<allowed-methods>login,listEmp</allowed-methods>
</action>
<action name="dept_*" method="{1}" class="deptAction">
<allowed-methods>selectall,selectempbydid</allowed-methods>
</action>
</package>
</struts>
在applicationcontext.xml中配置action(将action交给IOC容器管理)
<!-- 配置empAction -->
<bean class="com.lanxin.Action.EmpAction" id="empAction"
scope="prototype">
<property name="empDaoImpl" ref="empDaoImpl"></property>
</bean>
<!-- 配置deptAction -->
<bean class="com.lanxin.Action.DeptAction" id="deptAction"
scope="prototype">
<property name="deptDao" ref="deptDaoImpl"></property>
</bean>
7.在web.xml中配置struts过滤器,spring监听器,spring
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>Archetype Created Web Application</display-name>
<!-- 配置struts过滤器 -->
<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 配置spring -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!--配置spring监听-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>