AOP(Aspect Oriented Programming)面向切面编程

我的理解点

  • 编程思想演进过程,面向过程编程POP(Procedure Oriented Programming)、面向对象编程OOP(Object Oriented Programming)、面向切面编程AOP(Aspect Oriented Programming),POP和OOP是处理不同场景的两种想法,AOP是对OOP不足之处的补充
  • 项目中加入AOP代码时不应该对业务代码有侵入性,而是应该对接入点(Joinpoint)进行仔细编写,精确匹配需要切的类或者方法
  • AOP是提取公共代码的一种方式,当项目中多处模块会使用同样的代码,就可以将这个同样代码提取一个切面类中

AOP基本概念

  • Joinpoint(接入点),程序执行中的要点。例如,joinpoints可以定义对类中特定方法的调用,我的理解应该就是编写匹配类或者方法的语句
  • Pointcuts(切入点),用于指定连接点并在这些点处收集特定上下文的程序构造,我的理解就是定义的那个空的方法,结合接入点成为一个可以被调用的就是切入点。
  • Advices(通知),满足特定条件时运行的代码。例如,建议可以在执行连接点之前记录消息。五个通知点,前置通知(before)、报错通知(after throwing)、后置通知(after)、环绕通知(around)、返回通知(after returning)
  • Aspect(切面),切入点和通知的结合
  • Weave(织入),将切面代码织入到目标程序中的方式,分为动态织入和静态织入。

扩展概念

  • 静态织入就是在编译期间,利用ajc编译器,将切面代码编入目标代码中。
  • 动态织入又分JDK代理方式和cglib方式
  • JDK代理方式,底层是通过反射方式实现的,需要代理类要实现接口。Java中大致实现方式是,实现InvocationHandler,实现invoke方法
  • cglib方式,底层是通过继承方式实现的,cglib会用字节码方式生成代理类的子类,实现MethodInterceptor,实现intercept方法

参考资料

上次更新: 2019-07-10 05:58:42