动态代理的使用

public class MyClass {

    public static void main(String[] args) throws Exception {
        //静态代理
//        Massage message = new Lucy();
//        Agent agent = new Agent(message);
//
//        agent.massage();

        //动态代理
        A a= new A();


        Object o = Proxy.newProxyInstance(MyClass.class.getClassLoader(),
                new Class[]{Massage.class}, new InvocationHandler() {
                    @Override
                    public Object invoke(Object o, Method method, Object[] objects) throws Throwable {

                        return method.invoke(a,objects);
                    }
                });

        Massage massage = (Massage) o;
        massage.massage();

        Wash wash = (Wash) o;
        wash.wash();


        proxy();
    }


    private static void proxy() throws Exception {
        String name = Massage.class.getName() + "$Proxy0";
        //生成代理指定接口的Class数据
        byte[] bytes = ProxyGenerator.generateProxyClass(name, new Class[]{Massage.class});
        FileOutputStream fos = new FileOutputStream("lib/" + name + ".class");
        fos.write(bytes);
        fos.close();
    }
}

知识点解析见

猜你喜欢

转载自blog.csdn.net/baidu_24743861/article/details/128481825