1.1 动态代理
- 动态代理的角色和静态代理的一样, 动态代理的代理类是动态生成的 . 静态代理的代理类是提前写好的。
- 动态代理分为两类 : 一类是基于接口动态代理 , 一类是基于类的动态代理。
- 基于接口的动态代理----JDK动态代理。
- 基于类的动态代理–cglib。
- 现在用的比较多的是 javasist 来生成动态代理 . 百度一下javasist。
JDK的动态代理需要了解两个类 : InvocationHandler 和 Proxy
InvocationHandler【调用处理程序】
Object invoke(Object proxy, 方法 method, Object[] args);
//参数
//proxy - 调用该方法的代理实例
//method -所述方法对应于调用代理实例上的接口方法的实例。 方法对象的声明类将是该方法声明的接
口,它可以是代理类继承该方法的代理接口的超级接口。
//args -包含的方法调用传递代理实例的参数值的对象的阵列,或null如果接口方法没有参数。 原始
类型的参数包含在适当的原始包装器类的实例中,例如java.lang.Integer或java.lang.Boolean
。
Pxoxy【代理】
//生成代理类
public Object getProxy(){
return Proxy.newProxyInstance(this.getClass().getClassLoader(),
rent.getClass().getInterfaces(),this);
}
1.2 代码示例
Rent接口(抽象角色)
package cn.guardwhy.domain;
// 抽象角色:租房
public interface Rent {
public void rent();
}
Landlord
package cn.guardwhy.domain;
// 真实角色: 房东,要出租房子
public class Landlord implements Rent {
@Override
public void rent() {
System.out.println("房屋出租!!!");
}
}
ProxyInvocationHandler 即代理角色
package cn.guardwhy.proxy;
import cn.guardwhy.domain.Rent;
import java.lang.reflect.In