java动态代理实现机制

来源:互联网 发布:p2p网络借贷发展现状 编辑:程序博客网 时间:2024/05/29 15:16
  java动态代理是利用反射机制来动态实现代理类的字节码,无需程序员手工编写代理代码,可以简化编程工作和提高软件的可扩展性啊;  java动态代理的实现主要依靠java.lang.reflect包中InvocationHandler接口和Proxy类;  Proxy类主要方法:  getProxyClass()负责创建动态代理类,其完整方法如下:  public static Class<?> getProxyClass(ClassLoader loader,Class<?>... interfaces)  newProxyInstance()方法负责创建动态代理类的实例,如下:  public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)  loader为指定的类加载器,interfaces为动态代理类需要实现的接口,h为与动态代理类关联的InvocationHandler对象;  Proxy创建的动态代理类具有以下特点     1. 动态代理类是public,final和非抽象的;     2. 动态代理类的名称是以"$Proxy"开头的;     3. 动态代理类实现getProxyClass()和newProxyInstance()方法参数interfaces中指定的所有接口     4. 动态代理类都实现了java.lang.reflect.Proxy;     5. Proxy类的isProxyClass()方法可以用来判断参数所代表的类是否是动态代理类;     6. 动态代理类都有一个public的构造方法,该构造方法的参数是InvocationHandler的实例; Proxy创建的动态代理类实例具有以下特点:    1. 动态代理类的实例foo,同时动态代理类实现了Foo接口,那么foo instanceof Foo 判断为true,同时foo可以强制转换为Foo;    2. 每个动态代理类都关联一个InvocationHandler对象,可以通过Proxy类的静态getInvocationHandler(Object proxy)方法,获得参数proxy指定的动态代理类实例所关联的InvocationHandler;    3. 当程序调用动态代理类实例的menthod()方法时,该方法会调用关联InvocationHandler的invoke()方法;
1 0