AOP(面向切面编程)
它是面向对象的一种补充增强,它在这基础之上增加了一些而外的功能增强。
它可以在原有的行为不改变的前提,在这之前或者之后完成一些而外的事情
而AOP用的的思想和模式就是代理模式。
代理模式分为两种:
1)静态代理
编静态代理的代理对象是开发人员自行编写好的,并且在编译期就已经确定。
缺点:
1.需要为每一个目标对象编写相应的代理实例,从而代理不同的业务逻辑。
2.当接口发生变动时,所有的代理类的实现类都必须修改。
2)动态代理
使用动态代理,代理实例是不需要开发人员去编写,而是有相应的处理程序在运行时动态产生一个字节码,这个字节码就是代理对象,并加载到JVM中执行。由于代理实例是在运行时才会动态产生,因此就叫做动态代理。它和静态代理的区别就在于,静态代理的代理实例是人为编写的,并且实在便宜期就已经确定的。
在Jav语言层面实现动态代理的机制有很多,例如:
JDK动态代理(官方)
- Proxy类,用于动态产生代理对象
- InvocationHandler接口,回调处理器,负责调用目标对象的行为,并实现功能增强。
JDK动态代理有一个特点,
CGLIB动态代理(第三方开源)