返回介绍

7.2 插件的初始化

发布于 2025-04-26 13:08:34 字数 1403 浏览 0 评论 0 收藏

插件的初始化是在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。