情景是这样的
我有一个工具类,依赖于一个 @Configuration 类的 Bean 去算出一个字段的值。
public class KeyHolder implements ApplicationListener<?> {
private volatile static String key = null;
public static String getKey() {
return Objects.requireNonNull(key);
}
@Override
public void onApplicationEvent(? event) {
final Options options = event.getApplicationContext().getBean(Options.class);
key = calculateBy(options);
}
然后这个 getKey()
方法会被 @Controller/@Service 这类 Bean 在初始化时调用,因此在所有 Bean 的初始化都完成后才发布的事件如 ApplicationStartedEvent,ApplicationReadyEvent 应该都不行。不知道有没有事件是正好在两类 Bean 初始化阶段之间的。
谢谢
1
fdgdbr 2020-10-30 10:06:01 +08:00 1
把 key = calculateBy(options)放到 PostConstruct 注解的方法里面,然后用 Order 注解规定 Bean 的初始化顺序,不知道这样行不行
|
2
Newyorkcity OP @fdgdbr 没太理解,你的意思是干脆把 KeyHolder 也弄成一个普通的 Bean,然后通过规定 Bean 或者依赖关系确保这个 Bean 首先加载?好像也是个好办法
|
3
fdgdbr 2020-10-30 16:35:52 +08:00
@Newyorkcity 这跟是不是普通 bean 没关系,只要是 bean 就可以规定初始化顺序的把
|