mybatis的动态代理是基于jdk动态代理还是cglib动态代理?
时间: 2024-06-15 11:05:52 浏览: 296
jdk 的动态代理和CGLIB代理
Mybatis的动态代理是基于JDK动态代理CGLIB动态代理的结合使用的。具体来说,Mybatis在代理Mapper接口时使用了JDK动态代理,而在处理映射对象的懒加载时使用了CGLIB动态代理。
为什么代理Mapper不使用CGLIB动态代理呢?这是因为Mapper接口通常是基于接口的,而JDK动态代理只能代理接口,所以Mybatis选择了使用JDK动态代理来代理Mapper接口。
为什么处理映射对象的懒加载不使用CGLIB动态代理或者JDK提供的动态代理,而是引入javassist代理库呢?这是因为CGLIB动态代理和JDK动态代理都需要在运行时生成代理类的字节码,而javassist相比其他动态代理库来说更加高效。因此,Mybatis选择了使用javassist代理库来实现对映射对象的懒加载[^1]。
阅读全文