黑马程序员技术交流社区

标题: 动态代理 [打印本页]

作者: China_Riven    时间: 2015-7-23 21:08
标题: 动态代理
package cn.itcast2;

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

/*
* 动态代理:
*                 被代理者
*                 代理者
*
*                 代理者   代理   被代理者   执行方法
*                 执行方法:本来是被代理者的方法,却被代理者代理执行了       
*                 这里的动态:
*                         代理的方法是动态的。
*
* 需求:
*                 使用代理对象   
*                 代理Person的一个对象
*                 调用help方法
*
* JDK提供的代理只能针对接口做代理。
* Proxy:代理类
*         创建动态代理类对象
*         public static Object newProxyInstance(                     通过该方法返回代理对象
*                                                                           ClassLoader loader,
                                      Class<?>[] interfaces,
                                      InvocationHandler h)
                               throws IllegalArgumentException

    InvocationHandler:    接口         用于定义如何代理
            Object invoke(Object proxy,    这个方法定义了代理类如何代理
              Method method,
              Object[] args)
              throws Throwable
        proxy:代表代理对象,但是这里不使用!   
        method: 要被代理的方法  就是那个动态的方法
        args:参数

*/
public class Demo {

        public static void main(String[] args) {
               
                //被代理者
                Person p = new Person();
       
                //代理者:代理对象
                ClassLoader loader = p.getClass().getClassLoader();
                Class<?>[] interfaces = p.getClass().getInterfaces();
               
                //创建InvocationHandler对象
                InvocationHandler ih = new MyHandler(p);
               
                //代理对象
                Object object = Proxy.newProxyInstance(loader, interfaces, ih);
                Animal myProxy = (Animal)object;
                //通过代理对象调用方法
                myProxy.eat();
                myProxy.sleep(3);
                String sport = myProxy.sport();
                System.out.println(sport);
        }
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2