Java动态代理初识

 

 

package d9_proxy;

/**
 * FileName: Test
 * Author:   lps
 * Date:     2022/4/26 13:02
 * Sign:刘品水 Q:1944900433
 * 学习开发一个动态代理对象出来 理解动态代理执行流程
 */
public class Test {
    public static void main(String[] args) {
        //创建一个对象 对象的类必须实现接口
        star s = new star("张伟");
        Skill s2 = StarAgentProxy.getProxy(s);
        s2.jump();
        s2.sing();

    }
}
package d9_proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * FileName: StarAgent
 * Author:   lps
 * Date:     2022/4/26 13:12
 * Sign:刘品水 Q:1944900433
 */
public class StarAgentProxy {
    /**
     * 设计一个方法返回一个明星对象的代理对象
     * static Object newProxyInstance(ClassLoader loader,
     * Class<?>[] interfaces,对象的实现接口列表
     * InvocationHandler h)
     * 返回指定接口的代理实例,该代理实例将方法调用分派给指定的调用处理程序。
     */
    public static Skill getProxy(star s) {
        //为star这个对象生成代理对象
        return (Skill) Proxy.newProxyInstance(s.getClass().getClassLoader(),
                s.getClass().getInterfaces(), new InvocationHandler() {
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        System.out.println("请掏出首付");
                        Object rs = method.invoke(s, args);
                        //method正在调用方法对象 args代表这个方法的参数

                        System.out.println("收尾款 接回star");
                        return rs;
                    }
                });
    }
}
package d9_proxy;

/**
 * FileName: star
 * Author:   lps
 * Date:     2022/4/26 13:03
 * Sign:刘品水 Q:1944900433
 */
public class star implements Skill {
    private String name;

    public star() {
    }

    public star(String name) {
        this.name = name;
    }

    @Override
    public void jump() {
        System.out.println(name + "开始跳舞");
    }

    @Override
    public void sing() {
        System.out.println(name + "开始唱歌");
    }
}
package d9_proxy;

/**
 * FileName: Skill
 * Author:   lps
 * Date:     2022/4/26 13:03
 * Sign:刘品水 Q:1944900433
 */
public interface Skill {
    void jump();//
    void sing();//
}

 

posted @ 2022-04-26 13:41  刘品水  阅读(21)  评论(0编辑  收藏  举报