麻绳先生

做一些记录性的工作

AOP相关概念

动态代理

特点:字节码随用随创建,随用随加载
作用:不修改源码的基础上对方法增强
分类:基于接口的动态代理和基于子类的动态代理

基于接口的动态代理

使用Proxy类中的newProxyInstance方法创建代理对象,被代理类至少实现一个接口,否则不能使用。newProxyInstance方法有三个参数,

  • ClassLoader:用于加载代理对象字节码,和被代理对象使用相同的类加载器,固定写法;
  • Class[]:用于让代理对象和被代理对象有相同的方法,固定写法;
  • InvocationHandler:用于增强的代码,一般都是写一个接口的实现类,通常情况下是匿名内部类,但不是必须的,此接口的实现类都是谁用谁写;

基于子类的动态代理

使用Enhancer类中的create方法,要求 被代理类不能是最终类。该create方法有两个参数,

  • class:用于指定被代理对象的字节码
  • callback:用于提供增强代码

AOP(Aspect Oriented Programming)

通过预编译方式和运行期动态代理实现程序功能的统一维护。是函数式编程的一种衍生范型。利用AOP可以对业务逻辑各个部分进行隔离,从而使业务逻辑各部分耦合度降低,提高程序可重用性,提高开发效率。

作用:在程序运行期间,不修改源码对已有方法进行增强;
优势:

  • 减少重复代码
  • 提高开发效率
  • 维护方便

实现方式:动态代理技术

相关术语

  • Joinpoint连接点:指那些被拦截到的点
  • Pointout切入点:要对哪些joinpoint进行拦截的定义,被增强的连接点成为切入点
  • Advice通知或增强:通知是指拦截到joinpoint之后所要做的事情就是通知。通知的类型有前置通知、后置通知、异常通知、最终通知、环绕通知。环绕通知中有明确的切入点方法调用。
  • Introduction引介:是一种特殊的通知在不修改类代码的前提下,introduction可以再运行期为类动态地添加一些方法或field
  • Target目标对象:代理的目标对象
  • Weaving织入:指把增强应用到目标对象来创建新的代理对象的过程。spring采用动态代理织入,而aspectj采用编译期织入和类装载期织入。、
  • Proxy代理:一个类被AOP织入增强后,被产生一个结果代理类。
  • Aspect切面:是切入点和通知(引介)的结合