提供代理接口
public interface Rent {
public void massage();
}
被代理类
public class Host implements Rent{
@Override
public void massage() {
System.out.println("房东要租房!");
}
}
代理类
public class ProxyCompant implements InvocationHandler{
//获取被代理的对象
private Object target;
public void setTarget(Rent target){
this.target = target;
}
//产生代理对象
public Object getProxy(){
return Proxy.newProxyInstance(this.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
}
//调用被代理对象的方法
@Override
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) {
//传入真实对象
Host host = new Host();
//创建代理对象
ProxyCompant pt = new ProxyCompant();
//设置被代理对象
pt.setTarget(host);
//产生代理对象
Rent proxy = (Rent)pt.getProxy();
//调用被代理对象的方法
proxy.massage();
}
}
使用CGLIB实现动态代理
被代理类
public class PersonService {
public PersonService() {
System.out.println("PersonService构造");
}
public void setPerson() {
System.out.println("PersonService:setPerson");
}
}
代理类
public class CglibProxyIntercepter implements MethodInterceptor {
@Override
public Object intercept(Object sub, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
System.out.println("执行前...");
Object object = methodProxy.invokeSuper(sub, objects);
System.out.println("执行后...");
return object;
}
}
调用代理对象
public class Test {
public static void main(String[] args) {
//代理类class文件存入本地磁盘
System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY, "D:\code");
Enhancer enhancer = new Enhancer();
//设置代理对象
enhancer.setSuperclass(PersonService.class);
//设置回调方法
enhancer.setCallback(new CglibProxyIntercepter());
//生成代理对象
PersonService proxy= (PersonService)enhancer.create();
//执行被代理对象的方法
proxy.setPerson();
}
}



