mybatis的动态代理是基于jdk动态代理还是cglib动态代理?
时间: 2024-06-15 08:05:52 浏览: 392
Mybatis的动态代理是基于JDK动态代理CGLIB动态代理的结合使用的。具体来说,Mybatis在代理Mapper接口时使用了JDK动态代理,而在处理映射对象的懒加载时使用了CGLIB动态代理。
为什么代理Mapper不使用CGLIB动态代理呢?这是因为Mapper接口通常是基于接口的,而JDK动态代理只能代理接口,所以Mybatis选择了使用JDK动态代理来代理Mapper接口。
为什么处理映射对象的懒加载不使用CGLIB动态代理或者JDK提供的动态代理,而是引入javassist代理库呢?这是因为CGLIB动态代理和JDK动态代理都需要在运行时生成代理类的字节码,而javassist相比其他动态代理库来说更加高效。因此,Mybatis选择了使用javassist代理库来实现对映射对象的懒加载[^1]。
相关问题
mybatis动态代理
Mybatis动态代理是Mybatis框架的一项核心特性之一,它可以自动生成Mapper接口的实现类,避免手动编写SQL语句。在运行时,Mybatis会自动创建Mapper接口的实现类,并将Mapper接口的方法映射到SQL语句上执行,从而实现数据访问与数据库操作的对接。 Mybatis动态代理基于Java的动态代理机制实现,底层使用JDK动态代理或者CGLib动态代理技术,通过反射机制来实现动态代理。
Mybatis 的动态代理
Mybatis的动态代理是指在运行时动态生成DAO接口的实现类,这个实现类不需要手动编写,而是由Mybatis框架自动生成。
Mybatis的动态代理主要是使用JDK动态代理和CGLIB动态代理两种方式实现的。在接口有实现类的情况下,Mybatis会优先使用JDK动态代理,否则使用CGLIB动态代理。
在使用Mybatis时,我们只需要编写DAO接口,并在映射文件中配置SQL语句,Mybatis框架就会自动为我们生成实现类,并将SQL语句和DAO接口方法进行绑定,使得我们可以通过接口调用SQL语句。
动态代理的优点是可以减少代码量,提升开发效率。同时,Mybatis的动态代理还可以实现一些高级功能,比如分页查询、多表关联查询等。
阅读全文
相关推荐















