DataTable的高低优先级有必要吗
来源:7-10 【实战技能提升】索引服务类缓存的实现

街边七号
2019-01-27
课程中指出DataTable要在其他索引实现注册到Ioc之前注入。为什么呢?适用于的场景是什么呢?我们的类实现了ApplicationContextAware拿到了ApplicationContext。
在使用DataTable获取索引bean的时候都是通过applicationContext.getBean来获取的。
这和DataTable的优先级有什么关系呢?是有特殊情况吗?我把它的优先级调成最低。单元测试也是一样可以跑通啊。
写回答
1回答
-
同学你好:
之所以将 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 群随时交流、讨论,也非常感谢同学的支持!
212019-08-31
相似问题
DataTable的优先级问题
回答 1
优先级的问题
回答 1