房屋出租的接口
package 动态代理;
//租房接口
public interface Rent {
public void rent();
}
房东实现出租的方法
package 动态代理;
// 房东进行租房
public class Host implements Rent
{
@Override
public void rent() {
System.out.println("房东开始出租房子啦!");
}
}
设置调用处理器,实现InvocaHandler 接口
package 动态代理;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
// 我的程序调用处理器,通过实现InvocationHandler 编程一个处理器,再通过Proxy 代理类的newProxyInstance()方法 获得 形成的代理对象
public class MyInvocationHandler implements InvocationHandler {
// 将被代理的接口对象引入
private Rent rent;
// private Object object;
//
// public void setObject(Object object) {
// this.object = object;
// }
public void setRent(Rent rent) {
this.rent = rent;
}
public Object getProxyClass(){
// return Proxy.newProxyInstance(this.getClass().getClassLoader(),object.getClass().getInterfaces(),this);
return Proxy.newProxyInstance(this.getClass().getClassLoader(),rent.getClass().getInterfaces(),this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
seeHouse();
method.invoke(rent,args);
// method.invoke(object,args);
fare();
return null;
}
// 这里的方法应该是被代理类所需要的通用的方法,比如日志、事务等。。。
public void seeHouse(){
System.out.println("中介带你看房!!");
}
public void fare(){
System.out.println("向中介付钱!!");
}
}
客户端调用
package 动态代理;
public class Client {
public static void main(String[] args) {
// 创建出要被代理的角色
Host host = new Host();
MyInvocationHandler myInvocationHandler = new MyInvocationHandler();
// 将被代理的角色放入调用处理器中
myInvocationHandler.setRent(host);
Rent proxyClass = (Rent) myInvocationHandler.getProxyClass();
proxyClass.rent();
}
}
网友评论