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 喝个咖啡,先把衣服穿上 写代码... 衣服脱了,继续喝咖啡i
时间: 2024-10-08 15:37:48