两种动态代理1、java动态代理利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。2、cglib动态代理利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。 spring中的动态代理 spring会自动在JDK动态代理和CGLIB之间转换1、 默认使用Java动态代理 来创建AOP代理,这样就可以为任何接口实例创建代理了。2、当需要代理的类没有实现代理接口的时候,Spring会切换为使用CGLIB代理。3、可以通过配置 强制使用CGLIB实现AOP ,配置方法为:(1)添加CGLIB库,SPRING_HOME/cglib/*.jar(2)在spring配置文件里面"proxy-target-class"属性设置为true 两种动态代理的区别1、实现方式(1)JDK动态代理只能对实现了接口的类生成代理,而不能针对类(2)CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法因为是继承,所以该类或方法不要声明成final2、性能差别(1)使用CGLib实现动态代理,CGLib底层采用ASM字节码生成框架,使用字节码技术生成代理类, 比使用Java反射效率要高。唯一需要注意的是,CGLib不能对声明为final的方法进行代理,因为CGLib原理是动态生成被代理类的子类。(2)在对JDK动态代理与CGlib动态代理的代码实验中看
相关文章
- 12-01动态代理类的实现和解析
- 12-01AOP中实现动态代理的两种方式
- 12-01CGLIB 动态代理的实现
- 12-01谈谈Spring对于@Configuration的Cglib代理
- 12-01Spring中,动态代理Bean生成的过程
- 12-01AOP底层实现 两种代理技术(jdb动态代理 cglib代理)
- 12-01基于spring data jpa封装带有动态分页查询、动态条件求和的基础service类和基础controller类
- 12-01从代理机制到Spring AOP,这篇给你安排得明明白白的
- 12-01Spring核心接口Ordered的实现及应用 (动态切换数据源时候用到)
- 12-01Spring Data JPA 的 Specifications动态查询