MyBatis 源码分析 - 配置文件解析过程 (13)

上面的代码比较多,不过不用太担心。不管是通过注解的方式,还是通过反射的方式,它们最终目的是为了解析出javaType的值。解析完成后,这些方法会调用中间方法register(Type, TypeHandler),这个方法负责解析jdbcType,该方法上一节已经分析过。一个复杂解析 javaType,另一个负责解析 jdbcType,逻辑比较清晰了。那我们趁热打铁,继续分析下一个注册方法,编号为①。

2.8.4 register(String) 方法分析

本节代码的主要是用于自动扫描类型处理器,并调用其他方法注册扫描结果。该方法的分析如下:

public void register(String packageName) { ResolverUtil<Class<?>> resolverUtil = new ResolverUtil<Class<?>>(); // 从指定包中查找 TypeHandler resolverUtil.find(new ResolverUtil.IsA(TypeHandler.class), packageName); Set<Class<? extends Class<?>>> handlerSet = resolverUtil.getClasses(); for (Class<?> type : handlerSet) { // 忽略内部类,接口,抽象类等 if (!type.isAnonymousClass() && !type.isInterface() && !Modifier.isAbstract(type.getModifiers())) { // 调用注册方法 ④ register(type); } } }

上面代码的逻辑比较简单,其中注册方法④已经在上一节分析过了,这里就不多说了。

2.8.5 小结

类型处理器的解析过程不复杂,但是注册过程由于重载方法间相互调用,导致调用路线比较复杂。这个时候需要想办法理清方法的调用路线,理清后,整个逻辑就清晰明了了。好了,关于类型处理器的解析过程就先分析到这。

2.9 解析 mappers 配置

前面分析的都是 MyBatis 的一些配置,本节的内容原本是打算分析 mappers 节点的解析过程。但由于本文的篇幅已经很大了,加之 mappers 节点的过程也比较复杂。所以,关于本节的内容,我会独立成文,后面再进行更新。这里先告知大家一下。

3.总结

本文对 MyBatis 配置文件中部分配置的解析过程进行了详细的分析。本文所关注的点不局限于配置文件的解析过程,如果仅分析配置文件,那就简单多了。对于我来说,我更希望在分析配置文件的过程中,尽量把一些背景知识弄明白,这样才能对 MyBatis 有更多的了解。从本文的篇幅以及内容上来说,我觉得本篇文章达到了自己的预期。通过本文的分析,也使我加深了对 MyBatis 的理解。总的来说,收获还是比较多的。不过个人水平有限,若文章有错误不妥之处,也请大家多多指教。

本篇文章篇幅比较大,写起来还是很耗费精力的。如果大家觉得这篇文章还不错的话,不妨给个赞吧,算是对我的鼓励了。好了,本篇文章就到这里了,感谢大家的阅读。

参考

MyBatis 官方文档

附录:MyBatis 源码分析系列文章列表 更新时间 标题
2018-07-16   MyBatis 源码分析系列文章导读  
2018-07-20   MyBatis 源码分析 - 配置文件解析过程  

本文在知识共享许可协议 4.0 下发布,转载需在明显位置处注明出处
作者:coolblog.xyz
本文同步发布在我的个人博客:


本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyzyxw.html