首页 > 代码库 > Java反射机制动态代理

Java反射机制动态代理

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

Java反射机制动态代理