SpringAOP原理
- 底层采用动态代理的方式实现,在运行期间,对业务方法进行增强,所以不会生成新类。
JDK动态代理
- 所以JDK动态代理的使用场景目标类要去实现一个接口才行。
- 程序运行时,运用反射机制动态创建,不需要手工编写的,他是通过method.invoke()这个方法进行创建的,JDK动态代理机制是通过委托机制,动态的去实现对应的接口。再委托handler去调用原始的实现类中的方法。
CGLIB动态代理
- 使用字节码处理框架asm,通过修改字节码来生成子类,CGLIB使用的是继承的机制,就是被代理的类和代理类之间是继承关系,也就是被代理的那个类不能有final进行修饰,以及方法上存在static, 或者 private修饰的方法都不能使用CGLIB
SpringAOP组成
-
横切关注点:
○ 对那些方法进行连接,连接后这么处理 -
通知Adcice
○ 在特定的切入点上执行增强处理 -
连接点JoinPoint
○ 可以切入的点,比如增删改查都可以作为连接点,因为都可以执行AOP的逻辑 -
切入点Pointcut
○ 只有真正要执行AOP中逻辑的才可以叫切入点,比如只想把增删改加入事务,查询并不想加入,那么切入点只有增删改,查询并不算切入点,只能说是连接点 -
切面Aspect(真正的插入的功能,通常就是一个类)
○ 就是要增强逻辑代码,通常是一个类 -
目标target
○ 目标类,真正的业务逻辑类 -
织入Weaving
○ 把切面应用到目标方法中,在目标业务方法起到作用了,就叫织入
SpringAOP好处
- 减少代码入侵,解耦
- 统一横切逻辑,更方便的插入和删除