文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
7.2 插件的初始化
插件的初始化是在 MyBatis 初始化的时候完成的,这点我们通过 XMLConfigBuilder 中的代码便可知道,如代码清单 7-2 所示。
代码清单 7-2:插件初始化
private void pluginElement(XNode parent) throws Exception { if (parent != null) { for (XNode child : parent.getChildren()) { String interceptor = child.getStringAttribute("interceptor"); Properties properties = child.getChildrenAsProperties(); Interceptor interceptorInstance = (Interceptor) resolveClass (interceptor).newInstance(); interceptorInstance.setProperties(properties); configuration.addInterceptor(interceptorInstance); } } }
在解析配置文件的时候,在 MyBatis 的上下文初始化过程中,就开始读入插件节点和我们配置的参数,同时使用反射技术生成对应的插件实例,然后调用插件方法中的 setProperties 方法,设置我们配置的参数,然后将插件实例保存到配置对象中,以便读取和使用它。所以插件的实例对象是一开始就被初始化的,而不是用到的时候才初始化的,我们使用它的时候,直接拿出来就可以了,这样有助于性能的提高。
我们再来看看插件在 Configuration 对象里是怎样保存的,如代码清单 7-3 所示。
代码清单 7-3:插件在 Configuration 中的保存
public void addInterceptor(Interceptor interceptor) { interceptorChain.addInterceptor(interceptor); }
interceptorChain 在 Configuration 里面是一个属性,它里面有个 addInterceptor 方法,如代码清单 7-4 所示。
代码清单 7-4:addInterceptor 方法
private final List<Interceptor> interceptors = new ArrayList<Interceptor>(); ...... public void addInterceptor(Interceptor interceptor) { interceptors.add(interceptor); }
显然,完成初始化的插件就保存在这个 List 对象里面等待将其取出使用。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论