AOP (Aspect Oriented Programming): 面向切面(方面)编程,拓展功能不修改源代码实现。
AOP 采用横向抽取机制,取代了传统纵向继承体系的重复性代码。
最开始的处理方式和纵向抽取机制
纵向抽取机制
aop 横向抽取机制:有接口的情况
带接口的横向抽取机制
aop 横向抽取机制:无接口的情况
无接口横向抽取机制
Spring的AOP的底层用到了两种代理机制:
JDK
的动态代理:针对实现了接口的类产生代理。Cglib
的动态代理:针对没有实现接口的类产生代理,应用的是底层的字节码增强的技术,生成当前类的子类对象。为了便于理解,我们假设有一个类:
public class User {
public void add() {
}
public void update() {
}
public void delete() {
}
}