JDK动态代理和CGLIB动态代理有什么不同呢?
下文笔者讲述JDK动态代理和CGLIB动态代理的区别说明,如下所示
Spring 如何使用JDK动态代理呢?
Spring 如何实现一个CGLlB动态代理呢?
动态代理
我们都知道Spring AOP中的动态代理有两种实现方式: 方式1: 使用JDK动态代理 方式2: 使用CGLIB动态代理
JDK动态代理简介
JDK动态代理只能为接口提供代理 不支持类的代理 其实现是依据InvocationHandler接口和Proxy类 InvocationHandler 通过invoke()方法反射来调用目标类中的代码 动态地将横切逻辑和业务编织在一起 接着Proxy利用 InvocationHandler动态创建一个符合某一接口的的实例 生成目标类的代理对象
当代理类没有实现InvocationHandler接口,则可使用CGLIB来动态代理目标类
CGLIB(Code Generation Library) 是一个代码生成的类库 可以在运行时动态的生成指定类的一个子类对象 并覆盖其中特定方法并添加增强代码 采用这种方式,即可实现AOP CGLIB实现动态代理的原理: 用继承的方式实现动态代理
注意事项: 当一个类被final标记 则无法使用CGLIB生成动态代理相关阅读:
Spring 如何使用JDK动态代理呢?
Spring 如何实现一个CGLlB动态代理呢?
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。