JAVA 动态代理

2020-01-08  本文已影响0人  周_0717

        动态代理属于设计模式中的代理模式,代理模式的定义为:为其它对象提供一种代理以控制对这个对象的访问控制;在某些情况下,客户不想或者不能直接引用另一个对象,这时候代理对象可以在客户端和目标对象之间起到中介的作用(百度百科)。动态代理则是在在程序运行时,通过反射机制动态生成代理对象。

        核心方法:public static ObjectnewProxyInstance(ClassLoader loader,  Class[] interfaces,  InvocationHandler h)。

        第一个参数:用来加载接口类文件的ClassLoader;

        第二个参数:需要被代理的接口数组,也可以通过默认实现对象去调用getClass().getInterfaces()获取;

        第三个参数:处理实际代理逻辑的,每次调用被代理接口的方法时,都会执行public Objectinvoke(Object proxy, Method method, Object[] args)方法,若有默认的接口实现,可以通过调用public native Object invoke(Object obj, Object... args)执行接口默认实现。

        代理创建过程大致如下:查找缓存中是否存在代理类的类对象,若不存在则创建代理类的类对象(详细见WeakCache中的get方法),获取代理类的类对象的构造函数,创建代理类实例对象。

        如果目标对象没有实现接口,可以使用Cglib代理。

上一篇下一篇

猜你喜欢

热点阅读