-
角色
– 同静态代理:客户、中介、房东、公共接口
-
代理类是动态生成的
-
需要了解Proxy类、InvocationHandler接口
-
基于接口(JDK动态代理)、基于类(cglib)
– 演示基于接口的动态代理
//公共接口
public interface UserService {
public void add();
public void delete();
}
//真实角色(房东)
public class UserServiceImp implements UserService {
public void add() {
System.out.println("添加");
}
public void delete() {
System.out.println("删除");
}
}
//调用处理类(可以自动生成代理类)
public class ProxyInvocationHandler implements InvocationHandler {
//被代理的接口
private Object target;
//setter方法
public void setTarget(Object target) {
this.target = target;
}
//生成得到代理类
public Object getProxy(){
return Proxy.newProxyInstance(this.getClass().getClassLoader(),target.getClass().getInterfaces(),this);
}
//处理代理实例,并返回结果
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object result = method.invoke(target,args); //在此条语句前后,可以扩充代理功能
return result;
}
}
//测试类(客户)
public class Client {
public static void main(String[] args) {
//真实角色
UserServiceImp userServiceImp = new UserServiceImp();
//调用处理类
ProxyInvocationHandler pih = new ProxyInvocationHandler();
pih.setTarget(userServiceImp); //传入真实角色
//动态生成代理类
UserService proxy = (UserService) pih.getProxy();
proxy.add();
}
}