在不改变源代码的情况下,对类进行了功能等扩展。在代理类的前后方法添加任何你想要添加的内容。
静态代理是在编译期确定。
动态代理需要在运行期确定的。反射是动态代理的一种。经常被用在框架中,比如spring的AOP、servlet的filter等。
1、介绍
是通过反射来接受被代理的类。
要求:被代理类必须实现一个接口。
核心是invocationHandler接口和Proxy类
关键代码是:Proxy.newProxyInstance(三个参数)
不需要一个实现的接口,底层采用Enhancer,在运行期动态生成一个子类。
注意:final类不能用cglib动态代理,因为final是不能再被继承的,不能有子类。
Enhancer.create(两个参数);