主要步骤:
1、创建切面类
@Component @Aspect //等价于 <aop:aspect ref="txManager"> public class MyTransactionManager { //设置切入点 @Pointcut("execution(* cn.zj.spring.service..*.*(..))")//<aop:pointcut expression="execution(* cn.zj.spring.service..*.*(..))" id="pt"/> public void pointcut() {} //@Before("pointcut()")//<aop:before method="begin" pointcut-ref="pt"/> public void begin() { System.out.println("开启事务"); } //@AfterReturning("pointcut()")//<aop:after-returning method="commit" pointcut-ref="pt"/> public void commit() { System.out.println("提交事务"); } //@AfterThrowing(pointcut="pointcut()",throwing="ex")//<aop:after-throwing method="rollback" pointcut-ref="pt" throwing="ex"/> public void rollback(Throwable ex) { System.out.println("回滚事务"); } //@After("pointcut()")//<aop:after method="close" pointcut-ref="pt"/> public void close() { System.out.println("关闭session"); } @Around("pointcut()") public void allInOne(ProceedingJoinPoint pjp) { try { System.out.println("开启事务"); //执行具体的方法 pjp.proceed(); System.out.println("提交事务"); } catch (Throwable e) { System.out.println("回滚事务"); }finally { System.out.println("关闭session"); } } }
环绕式和分部式不应该同时使用!!
2、配置组件注解扫描的包和开启AOP注解配置
<!-- 配置注解组件扫描的包位置 -->
<context:component-scan base-package="cn.zj.spring"/>
<!-- 开启spring aop的注解配置 -->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>