请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

DataTable的高低优先级有必要吗

课程中指出DataTable要在其他索引实现注册到Ioc之前注入。为什么呢?适用于的场景是什么呢?我们的类实现了ApplicationContextAware拿到了ApplicationContext。
在使用DataTable获取索引bean的时候都是通过applicationContext.getBean来获取的。
这和DataTable的优先级有什么关系呢?是有特殊情况吗?我把它的优先级调成最低。单元测试也是一样可以跑通啊。

正在回答

1回答

张勤一 2019-01-27 22:54:13

同学你好:

     之所以将 DataTable 的优先级定为最高,是因为 of 方法的存在,如下所示:

public static <T> T of(Class<T> clazz) {

    T instance = (T) dataTableMap.get(clazz);
    if (null != instance) {
        return instance;
    }

    dataTableMap.put(clazz, bean(clazz));
    return (T) dataTableMap.get(clazz);
}

    可以注意到,其中的 bean 方法是通过 ApplicationContext 的 getBean 方法实现。而 ApplicationContext 代表的就是 Spring 容器,即存储与装载 Bean 的容器。让 DataTable 最先注册到 Spring 容器中,即可保证 of 方法可用。因为监听 MySQL binlog 构造增量索引需要使用到 of 方法获取到类似于 AdUnitIndex 的索引服务,此时,如果 AdUnitIndex 已经注入,但是 of 方法并没有注入,将会发生错误。所以,让 DataTable 缓存服务先于各个索引服务在 Spring 容器中完成注册。


欢迎来 QQ 群随时交流、讨论,也非常感谢同学的支持!

2 回复 有任何疑惑可以回复我~
  • judyW #1
    这里不是很理解,为什么说必须设置优先级高才能保证of方法可用。不是只有spring容器加载完以后才能调用方法,优先级有什么用呢
    回复 有任何疑惑可以回复我~ 2019-08-31 19:47:13
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信