动态代理(dynamic Proxy)
动态代理(动态生成代理类)
-
JDK自带的动态代理
-
Javaassist字节码操作库实现
-
CGLIB
-
ASM(底层使用指令,可维护性较差)
相当于静态代理的优点:
抽象角色中(接口)声明的所有方法都被转移到调用处理器一个集中的方法中处理,这样
我们可以更加灵活和统一的处理众多的方法。
JDK自带的动态代理:
Java.lang.reflect.Proxy
作用:动态生成代理类和对象
Java.Lang.reflect.InvocationHandler(处理器接口)
每次通过invoke方法实现对真实角色的代理访问
每次通过Proxy生成代理类对象时都要指定对应的处理器对象
一般的动态代理代码如下:
Star realStar = new RealStar();
StarHandler handler = new
StarHandler(realStar);
Star proxy =
(Star)Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(), new Class[]{Star.class},
handler);
proxy.sing();