packagecom.kaige123;/** * 程序员 *@author凯哥 */publicinterfaceChengxuyuan{/**
* 写代码方法
*/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
喝个咖啡,先把衣服穿上
写代码...
衣服脱了,继续喝咖啡