MyBatis的底层实现之反射工具箱(reflector)

淡淡的烟草味﹌ 2024-03-26 11:31 111阅读 0赞

基础支持层位于MyBatis整体架构的最底层,支撑着MyBatis的核心处理层,是整个框架的基石。基础支持层中封装了多个较为通用的、独立的模块。不仅仅为MyBatis提供基础支撑,也可以在合适的场景中直接复用。

反射模块详解

MyBatis在进行参数处理、结果集映射等操作时会使用到大量的反射操作,Java中的反射功能虽然强大,但是代码编写起来比较复杂且容易出错,为了简化反射操作的相关代码,MyBatis提供了专门的反射模块,该模块位于org.apache.ibatis.reflection包下,它对常见的反射操作做了进一步的封装,提供了更加简洁方便的反射API。

1 Reflector

Reflector是反射模块的基础,每个Reflector对象都对应一个类,在Reflector中缓存了反射需要使用的类的元信息

2 ReflectorFactory

ReflectorFactory接口主要实现了对Reflector对象的创建和缓存

3 Invoker

针对于Class中Field和Method的调用,在MyBatis中封装了Invoker对象来统一处理(有使用到适配器模式)

4 MetaClass

在Reflector中可以针对普通的属性操作,但是如果出现了比较复杂的属性,比如 private Person person; 这种,我们要查找的表达式 person.userName.针对这种表达式的处理,这时就可以通过MetaClass来处理了。我们来看看主要的属性和构造方法

5 MetaObject

我们可以通过MetaObject对象解析复杂的表达式来对提供的对象进行操作。具体的通过案例来演示会更直观些

6 反射模块应用

发表评论

表情:
评论列表 (有 0 条评论,111人围观)

还没有评论,来说两句吧...

相关阅读

    相关 java反射底层实现

    反射使用场景无处不在,常用jdk动态代理 底层设计到的主要类,Method(方法),Field(属性值),constructor(构造器),modifier(修饰工具类)

    相关 MyBatis底层实现原理

    动态代理的功能:通过拦截器方法回调,对目标target方法进行增强。 言外之意就是为了增强目标target方法。上面这句话没错,但也不要认为它就是真理,殊不知,动态代理还有投

    相关 Mybatis底层实现原理

    Mybatis底层原理 终于发现,原来Mybatis的底层原理是涉及到动态代理的,想想我们是如何使用Mybatis的?有一个接口类,有一个xml类型的Mapper,将xm