在日常的业务开发中,绝大多数我们都是不关注 bean 的加载顺序,然而如果在某些场景下,当我们希望某个 bean 优于其他的 bean 被实例化时,往往并没有我们想象中的那么简单
I. 启动类指定方式
在实际的 SpringBoot 开发中,我们知道都会有一个启动类,如果希望某个类被优先加载,一个成本最低的简单实现,就是在启动类里添加上依赖
@SpringBootApplication
public class Application {
public Application(DemoBean demoBean) {
demoBean.print();
}
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
}
请注意上面的构造方法,如果我们希望在应用启动之前,demoBean
就已经被加载了,那就让 Application 强制依赖它,所以再 Application 的 bean 初始化之前,肯定会优先实例化demoBean
相信上面这种写法,大家并不会陌生,特别是当我们应用启动之后,发现某个依赖的 bean(一般来讲是第三方库提供的 bean)还没有初始化导致 npe 时,用这种方法还是比较多的
case1
我们且不谈这种实现方式是否优雅,当我们希望targetBean
在所有的 bean 实例化之前被实例时,上面这种写法是否一定会生效呢?
case2
中间件同学:吭哧吭哧的开发了一个