特点
作用
分类
1. 基于接口的动态代理
- 涉及的类:Proxy
- 提供者:JDK官方
- 如何创建动态代理?
- 使用Proxy类中的newProxyInstance方法
- 创建要求
newProxyInstance方法的参数
- ClassLoader:类加载器
- 用于加载代理对象字节码的,写的是被代理对象使用相同的类加载器。固定写法。
- Class[]:字节码数组
- InvocationHandler:用于提供增强代码
- 写如何代理。一般都是写一个该接口的实现类,通常情况下都是匿名内部类,但不是必须的。
- 执行的被代理对象的任何接口都会经过该方法。
代码示例
Producer proxyproducer = (Producer) Proxy.newProxyInstance(producer.getClass().getClassLoader(), producer.getClass().getInterfaces(),
/*
o:代理对象的引用
method:当前执行的方法
objects:当前执行方法所需的参数
返回值:和被代理对象有相同的返回值
*/
new InvocationHandler() {
public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
/*
增强代码
*/
return method.invoke(o,objects);
}
});
2. 基于子类的动态代理
- 涉及的类:Enhancer
- 提供者:第三方cglib库
- 如何创建动态代理?
- 创建代理对象的要求:
create方法的参数
- Class:字节码
- Callback:用于提供增强的代码
- 一般写的都是该接口的子接口实现类:MethodInterceptor