package com.kaige123;/**
* 程序员
* @author 凯哥
*/public interface Chengxuyuan { /**
* 写代码方法
*/
public void xiedaima();
}
package com.kaige123;/**
* 程序员接口实现类
* @author 凯哥
*/public class ChengxuyuanImpl implements Chengxuyuan { public void xiedaima() {
System.out.println("写代码...");
}
}
package com.kaige123;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;
/**
* 处理类
* @author 凯哥
*/public class CxyHandler implements InvocationHandler { //程序员实现对象传递
private Chengxuyuan c; public CxyHandler(Chengxuyuan c) { this.c = c;
} /**
* 程序员接口的方法只要被调用就会通知到吃方法上
* @param proxy 代理对象
* @param method 告诉你 调用的方法 封装对象
* @param args 参数
*/
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("方法名称:"+method.getName());
System.out.println("喝个咖啡,先把衣服穿上");
Object obj=method.invoke(c, args);//调用方法
System.out.println("衣服脱了,继续喝咖啡");
return obj;
}
}
package com.kaige123;
import java.lang.reflect.Method;import java.lang.reflect.Proxy;/**
* 测试类
* @author 凯哥
*
*/public class Test { public static void main(String[] args) { //实现类对象
ChengxuyuanImpl chengxuyuanImpl = new ChengxuyuanImpl(); //得到反射类
Class classs = chengxuyuanImpl.getClass(); //创建处理类 然后把实现类对象传递
CxyHandler handler = new CxyHandler(chengxuyuanImpl); //开始创建代理对象 然后把代理对象转换成接口类型
Chengxuyuan chengxuyuan = (Chengxuyuan)
Proxy.newProxyInstance(
classs.getClassLoader(),
classs.getInterfaces(),
handler); //调用方法 有如 >>>invoke(Object proxy, Method method, Object[] args) >> xiedaima() >>调用完毕
chengxuyuan.xiedaima();
}
}
结果:
方法名称:xiedaima
喝个咖啡,先把衣服穿上
写代码...
衣服脱了,继续喝咖啡