先定义一个接口HouseInter
package com.cn;
public interface HouseInter {
public void rentHouse();
public void cancelHouse();
}
定义一个实现上面接口的类HouseOwner
package com.cn;
public class HouseOwner implements HouseInter {
public void rentHouse() {
System.out.println("租房");
}
public void cancelHouse() {
System.out.println("退房");
}
}
再写一个实现InvocationHandler的类ProxyHouse
package com.cn;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class ProxyHouse implements InvocationHandler{
private Object target;
public ProxyHouse(Object target)
{
this.target = target;
}
public Object invoke(Object arg0, Method method, Object[] arg2)
throws Throwable {
//接口类的方法执行之前
System.out.println("验证用户信息");
//接口类的方法执行
Object result = method.invoke(target, arg2);
//接口类的方法执行之后
System.out.println("结束");
return result;
}
}
最后写一个测试类TestProxy
package com.test;
import java.lang.reflect.Proxy;
import com.cn.HouseInter;
import com.cn.HouseOwner;
import com.cn.ProxyHouse;
public class TestProxy {
public static void main(String[] args) {
HouseInter houseInter = new HouseOwner();
ProxyHouse proxy = new ProxyHouse(houseInter);
//创建代理对象
//这里的参数不用HouseInter.class.getClassLoader()否则会出现类转换异常
HouseInter hi = (HouseInter)Proxy.newProxyInstance(houseInter.getClass().getClassLoader(), houseInter.getClass().getInterfaces(), proxy);
hi.rentHouse();
}
}
测试结果
验证用户信息
退房
结束