Java反射机制动态代理
packagecom.kaige123;
/** * 程序员 *@author凯哥*/publicinterfaceChengxuyuan{/**
* 写代码方法
【Java反射机制动态代理】*/publicvoidxiedaima();
}
packagecom.kaige123;
/** * 程序员接口实现类 *@author凯哥 */publicclassChengxuyuanImplimplementsChengxuyuan{publicvoidxiedaima(){System.out.println("写代码...");
} }
packagecom.kaige123;
importjava.lang.reflect.InvocationHandler;
importjava.lang.reflect.Method;
/** * 处理类 *@author凯哥 */publicclassCxyHandlerimplementsInvocationHandler{//程序员实现对象传递privateChengxuyuan c;
publicCxyHandler(Chengxuyuan c){this.c = c;
}/*** 程序员接口的方法只要被调用就会通知到吃方法上*@paramproxy 代理对象*@parammethod 告诉你 调用的方法 封装对象*@paramargs 参数*/publicObjectinvoke(Object proxy, Method method, Object[] args)throwsThrowable{System.out.println("方法名称:"+method.getName());
System.out.println("喝个咖啡,先把衣服穿上");
Object obj=method.invoke(c, args);
//调用方法System.out.println("衣服脱了,继续喝咖啡");
returnobj;
}}
packagecom.kaige123;
importjava.lang.reflect.Method;
importjava.lang.reflect.Proxy;
/** * 测试类 *@author凯哥 * */publicclassTest{publicstaticvoidmain(String[] args){//实现类对象ChengxuyuanImpl chengxuyuanImpl =newChengxuyuanImpl();
//得到反射类Class classs = chengxuyuanImpl.getClass();
//创建处理类 然后把实现类对象传递CxyHandler handler =newCxyHandler(chengxuyuanImpl);
//开始创建代理对象 然后把代理对象转换成接口类型Chengxuyuan chengxuyuan = (Chengxuyuan)Proxy.newProxyInstance(classs.getClassLoader(),classs.getInterfaces(),handler);
//调用方法有如>>>invoke(Object proxy, Method method, Object[] args)>> xiedaima() >>调用完毕chengxuyuan.xiedaima();
}}
结果:
方法名称:xiedaima
喝个咖啡,先把衣服穿上
写代码...
衣服脱了,继续喝咖啡
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 事件代理
- Java|Java OpenCV图像处理之SIFT角点检测详解
- java中如何实现重建二叉树
- 数组常用方法一
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- Java|Java基础——数组
- RxJava|RxJava 在Android项目中的使用(一)
- java之static、static|java之static、static final、final的区别与应用
- 深入理解|深入理解 Android 9.0 Crash 机制(二)