public interface Cat {
public void say();
}
public interface Dog {
public void sign();
}
public class ChinaCat implements Cat {
@Override
public void say(){
System.out.println("这是一只中国猫");
}
}
public class KejiDog implements Dog {
@Override
public void sign(){
System.out.println("这是一只柯基狗");
}
}
public class MyInvocationHandler implements InvocationHandler {
public Object object;
//用反射,执行代理类的对象的方法重写,都会调用如下invoke方法
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable{
Object returnObject=method.invoke(object,args);
return returnObject;
}
//创建被代理类的对象 的 代理类的对象
public Object proxy(Object object){
this.object=object;
Object proxyObject= Proxy.newProxyInstance(object.getClass().getClassLoader(),object.getClass().getInterfaces(),this);
return proxyObject;
}
public static void main(String args[]){
//1.创建被代理对象中国猫
ChinaCat chinaCat=new ChinaCat();
//2。创建被代理对象柯基狗
KejiDog kejiDog=new KejiDog();
//3.创建实现InvocationHandler的接口
MyInvocationHandler myInvocationHandler=new MyInvocationHandler();
//4.动态代理,生成代理类对象猫
Cat cat=(Cat)myInvocationHandler.proxy(chinaCat);
//5.调用MyInvocationHandler的invoke方法,实现代理类的方法重写
cat.say();
//4.动态代理,生成代理类对象狗
Dog dog=(Dog)myInvocationHandler.proxy(kejiDog);
//5.调用MyInvocationHandler的invoke方法,实现代理类的方法重写
dog.sign();
}
}
执行结果: