架构社区Java 杂谈

Spring的AOP面向切面

2018-05-13  本文已影响68人  林檎果

AOP在Spring中原理

通过实现BeanPostProcessor接口的postProcessBeforeInitialization和postProcessAfterInitialization方法,在初始化前后用代理对象加强原来的类

实现方式

AOP的相关术语

底层实现

总结

AspectJ用法

通知类型

切入点表达式

语法: execution(<访问修饰符>? <返回类型> <方法名>(<参数>) <异常>)
举例:

通知的使用

@Aspect
public class MyAspectAnno{
    ...
}
@Before(value="execution(* top.linxz.java.UserDao(..))")
public void before(JoinPoint joinPoint){
    //joinPoint就是切到的方法
}
@AfterReturning(value="execution(* top.linxz.java.UserDao(..))", returning="returning")
public void afterReturing(Object returning){
    //这个returning就是拿到的返回值
}
@Around(value="execution(* top.linxz.java.UserDao(..))", returning="returning")
public Object afterReturing(ProceedingJoinPoint joinPoint){
    System.out.println("环绕前通知")
    Object obj=joinPoint.proceed();//执行目标方法,如果不调用,目标方法就被拦截了。
    System.out.println("环绕后通知")
    return obj;
}
@AfterThrowing(value="execution(* top.linxz.java.UserDao(..))",throwing="e")
public void afterThrowing(Throwable e){
    
}
@After(value="execution(* top.linxz.java.UserDao(..))")
public void afterThrowing(Throwable e){
    
}

参考

  1. Spring AOP,https://class.imooc.com/course/587
  2. 基于AspectJ的AOP开发,https://class.imooc.com/course/588

关于我:

linxinzhe,全栈工程师,目前供职于某500强通信企业。人工智能,区块链爱好者。

GitHub:https://github.com/linxinzhe

欢迎留言讨论,也欢迎关注我~
我也会关注你的哦!

上一篇 下一篇

猜你喜欢

热点阅读