直接来代码
/**
* 进行AOP测试的通知类
*/
@Component("myAopAdvice") // 通知类加入容器
@EnableAspectJAutoProxy // 开启AOP
@Aspect // 该类设置为切面
public class MyAopAdvice{
@Pointcut("execution(* com.liuyun.jdbc.service.*.*(..))") // 定义切入点(在哪些方法上需要进行增强)
public void pt() {
}
@Before("pt()") // 前置通知,在切入点方法之前执行
public void before() {
System.out.println("AOP......before......");
}
@AfterReturning("pt()") // 后置通知,在切入点方法执行完成且无异常后执行
public void afterReturning() {
System.out.println("AOP......afterReturning......");
}
@AfterThrowing("pt()") // 异常通知,在切入点方法执行发生异常后执行
public void afterThrowing() {
System.out.println("AOP......afterThrowing......");
}
@After("pt()") // 最终通知,在切入点方法完成(或者异常处理完成)后执行(相当于finally的处理时机)
public void after() {
System.out.println("AOP......after......");
}
@Around("pt()") // 环绕通知,可以使用编程来实现上述所有通知类型
public Object around(ProceedingJoinPoint pjp) {
Object result = null;
try {
System.out.println("AOP...around......before......"); // 类似@Before
result = pjp.proceed(); // 执行切入点原始方法
System.out.println("AOP...around......afterReturning......"); // 类似@AfterReturning
return result;
} catch (Throwable e) {
System.out.println("AOP...around......afterThrowing......"); // 类似@AfterThrowing
e.printStackTrace();
} finally {
System.out.println("AOP...around......after......"); // 类似@After
}
return result;
}
}
完整代码:https://github.com/liuyunHappy/spring-aop-annotation.git