您的位置:首页 > 编程语言 > Java开发

java动态代理实现机制

2017-02-15 23:21 253 查看
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()方法;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: