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
喝个咖啡,先把衣服穿上
写代码...
衣服脱了,继续喝咖啡

    推荐阅读