动态代理的特点
字节码随用随创建,随用随加载。
它与静态代理的区别也在于此。因为静态代理是字节码一上来就创建好,并完成加载。
动态代理常用的有两种方式
基于接口的动态代理
提供者:JDK 官方的 Proxy 类。
要求:被代理类最少实现一个接口。
基于子类的动态代理
提供者:第三方的 CGLib,如果报 asmxxxx 异常,需要导入 asm.jar。
要求:被代理类不能用 final 修饰的类(最终类)。
创建的方式
*** Proxy.newProxyInstance(三个参数)**
- 参数含义:
*** ClassLoader:**和被代理对象使用相同的类加载器。
*** Interfaces:和被代理对象具有相同的行为。实现相同的接口。
*** InvocationHandler:如何代理。
Proxy.newProxyInstance
执行被代理对象的任何方法,都会经过该方法。
- 此方法有拦截的功能。
参数:
- proxy:代理对象的引用。不一定每次都用得到
- method:当前执行的方法对象
- args:执行方法所需的参数
- 返回值:
- 当前执行方法的返回值