【HBZ分享】SpringAOP原理

SpringAOP原理

  1. 底层采用动态代理的方式实现,在运行期间,对业务方法进行增强,所以不会生成新类。
JDK动态代理
  1. 所以JDK动态代理的使用场景目标类要去实现一个接口才行。
  2. 程序运行时,运用反射机制动态创建,不需要手工编写的,他是通过method.invoke()这个方法进行创建的,JDK动态代理机制是通过委托机制,动态的去实现对应的接口。再委托handler去调用原始的实现类中的方法。
CGLIB动态代理
  1. 使用字节码处理框架asm,通过修改字节码来生成子类,CGLIB使用的是继承的机制,就是被代理的类和代理类之间是继承关系,也就是被代理的那个类不能有final进行修饰,以及方法上存在static, 或者 private修饰的方法都不能使用CGLIB

SpringAOP组成

  1. 横切关注点:
    ○ 对那些方法进行连接,连接后这么处理

  2. 通知Adcice
    ○ 在特定的切入点上执行增强处理

  3. 连接点JoinPoint
    ○ 可以切入的点,比如增删改查都可以作为连接点,因为都可以执行AOP的逻辑

  4. 切入点Pointcut
    ○ 只有真正要执行AOP中逻辑的才可以叫切入点,比如只想把增删改加入事务,查询并不想加入,那么切入点只有增删改,查询并不算切入点,只能说是连接点

  5. 切面Aspect(真正的插入的功能,通常就是一个类)
    ○ 就是要增强逻辑代码,通常是一个类

  6. 目标target
    ○ 目标类,真正的业务逻辑类

  7. 织入Weaving
    ○ 把切面应用到目标方法中,在目标业务方法起到作用了,就叫织入

SpringAOP好处

  1. 减少代码入侵,解耦
  2. 统一横切逻辑,更方便的插入和删除

你可能感兴趣的:(java)