独自快乐|spring框架的入门学习:AOP和面向切面的事务( 六 )


独自快乐|spring框架的入门学习:AOP和面向切面的事务
独自快乐|spring框架的入门学习:AOP和面向切面的事务
独自快乐|spring框架的入门学习:AOP和面向切面的事务spring的注解配置首先使用注解配置需要在xml中完成三步 , 其中前两步和前面一样 , 后面的一步是开启注解aop
配置好了 , 之后我们需要在通知对象中进行配置:
package com.huanfeng.annotationaop;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.After;import org.aspectj.lang.annotation.AfterReturning;import org.aspectj.lang.annotation.AfterThrowing;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;//@Aspect表示这是一个通知类@Aspectpublic class MyAdvice {//前置通知@Before("execution(* com.huanfeng.service.*ServiceImpl.*(..))")public void before(){System.out.println("这是前置通知!!");}//后置通知@AfterReturning("execution(* com.huanfeng.service.*ServiceImpl.*(..))")public void afterReturning(){System.out.println("这是后置通知(如果出现异常不会调用)!!");}//环绕通知@Around("execution(* com.huanfeng.service.*ServiceImpl.*(..))")public Object around(ProceedingJoinPoint pjp) throws Throwable {System.out.println("这是环绕通知之前的部分!!");Object proceed = pjp.proceed();//调用目标方法System.out.println("这是环绕通知之后的部分!!");return proceed;}//异常通知@AfterThrowing("execution(* com.huanfeng.service.*ServiceImpl.*(..))")public void afterException(){System.out.println("出事啦!出现异常了!!");}//后置通知@After("execution(* com.huanfeng.service.*ServiceImpl.*(..))")public void after(){System.out.println("这是后置通知(出现异常也会调用)!!");}}我们每个通知都写一个execution太费事了 , 我们可以统一处理:
package com.huanfeng.annotationaop;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.After;import org.aspectj.lang.annotation.AfterReturning;import org.aspectj.lang.annotation.AfterThrowing;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.aspectj.lang.annotation.Pointcut;//@Aspect表示这是一个通知类@Aspectpublic class MyAdvice {//前置通知@Pointcut("execution(* com.huanfeng.service.*ServiceImpl.*(..))")public void pc(){}@Before("MyAdvice.pc()")public void before(){System.out.println("这是前置通知!!");}//后置通知@AfterReturning("MyAdvice.pc()")public void afterReturning(){System.out.println("这是后置通知(如果出现异常不会调用)!!");}//环绕通知@Around("MyAdvice.pc()")public Object around(ProceedingJoinPoint pjp) throws Throwable {System.out.println("这是环绕通知之前的部分!!");Object proceed = pjp.proceed();//调用目标方法System.out.println("这是环绕通知之后的部分!!");return proceed;}//异常通知@AfterThrowing("MyAdvice.pc()")public void afterException(){System.out.println("出事啦!出现异常了!!");}//后置通知@After("MyAdvice.pc()")public void after(){System.out.println("这是后置通知(出现异常也会调用)!!");}}


推荐阅读