导航

spring AOP - annotation

Posted on 2019-06-10 21:12  cdeelen  阅读(97)  评论(0编辑  收藏  举报

主要步骤:

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>