一:动态代理:
特点:字节码随用随创建,随用随加载
分类:
- 基于接口的动态代理
- 基于子类的动态代理
基于接口的动态代理:
- 要求:被代理类最少实现一个接口
- 提供者:JDK官方
- 涉及类:Proxy
- 创建代理对象的方法:newProxyInstance
- 方法中的参数:
-
ClasssLoader:类加载器;负责加载代理对象的字节码;和被代理对象使用相同的类加载器
-
Class[]:字节码数组;负责让生成的代理对象具有和被代理对象相同的方法;写什么要看被代理对象是一个接口还是一个实现类;如果时一个接口:new Class[]{接口};如果时一个实现类:XXX.getClass().getInterfaces()
-
InvocationHandler:一个接口,需要我们提供该接口的实现;作用时用于对方法增强;增强的代码,谁用谁写;写的是一个接口的实现类;通常是一个匿名内部类,但是不绝对
基于子类的动态代理:
- 要求:需要导入cglib的坐标,被代理类不能时最终类(不能被final修饰)
- 提供者:cglib
- 涉及类:Enhancer。创建代理对象的方法:create
- 方法中的参数:
-
Class:字节码对象;用于加载代理对象字节码的;写的时被代理对象的字节码
-
Callback:如何代理;提供增强代码的,该接口没有方法,需要用它的子接口MethodInterceptor