动态代理:
特点:字节码随用创建,随用加载
作用:不用修改源码的基础上增强
分类:
基于接口动态代理
基于子类动态代理
1.基于接口动态代理:
设计类:Proxy
提供者:JDK官方
如何创建代理对象:
使用Proxy类中的newProxyInstance
创建代理对象的要求:
被代理对象至少实现一个接口,没有不能代理
newProxyInstance方法参数:
classLoader:类加载器
用于加载代理对象的字节码,和被代理对象使用相同的类加载器
Class[]:字节码数组
用于让代理对象和被代理对象有相同的方法,固定写法
InvocationHandler:用于增强代理的代码
是让我们如何代理,我们一般都是些接口的实现类,通常情况下都是匿名内部类,但不是必须的
此接口的实现类谁用谁写
Proxy.newProxyInstance(obj.getClass().getClassLoader(),
obj.getClass().getInterfaces(),
new InvocationHandler(){
//proxy 代理对象的引用
// method 当前执行的方法
//args 当前执行方法所需的参数
// 返回值: 和被代理对象既有相同的返回值
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable{
return method.invoke(obj,args);
}
})
2.基于子类动态代理
设计类:Enhancer
提供者&#x