动态代理

# 动态代理 >i JDK原生动态代理是Java原生支持的,不需要任何外部依赖,但是它只能基于接口进行代理(需要代理的对象必须实现于某个接口) >w CGLIB通过继承的方式进行代理(让需要代理的类成为Enhancer的父类),无论目标对象有没有实现接口都可以代理,但是无法处理final的情况。 ## JDK 动态代理 Java的动态代理主要是基于Proxy类和InvocationHandler实现的; ### Proxy <img src="https://oscimg.oschina.net/oscnet/up-28defc25f1ad1558b319042bcaea523cacf.png" width=400 height=300> ### InvocationHandler java.lang.reflect.InvocationHandler#invoke ``` public Object invoke(Object proxy, Method method, Object[] args) throws Throwable; ``` ## CGlib动态代理 CGLIB(Code Generation Library)是一个基于ASM的字节码生成库,允许我们在运行时对字节码进行修改和动态生成。CGLIB通过继承方式实现代理: Enhancer:来指定要代理的目标对象,实际处理代理逻辑的对象,最终通过调用create()方法得到代理对象,对这个对象的所有非final方法的调用都会转发给MethodInterceptor; MethodInterceptor:动态代理对象的方法调用丢回转发到intercept方法进行增强 ## 参考资料 原文链接:https://blog.csdn.net/jingyoushui/article/details/104299347