【springboot高级】(一:自定义容器初始化器的三种方式,实现ApplicationContextInitializer接口之向SpringApplication对象中添加初始化器。(源码篇))

    技术2022-07-11  147

    上一篇【springboot高级】(一:自定义容器初始化器的三种方式,实现ApplicationContextInitializer接口之SpringFactoriesLoade加载。(源码篇))我们讲到了通过SpringFactoriesLoade加载的方式配置我们自定义初始化器的源码解析。 我们得知Springboot是在创建SpringApplication实例的时候通过pringFactoriesLoade加载所有的spring.factories文件,然后将其实例化存储在initializers属性中的,然后通过run方法再执行。

    今天我们讲像SpringApplication对象中添加初始化器。 我们从上节得知添加初始化器是在run方法之前,那么我们就应该在run方法之前将其添加进去。 最后代码如下:

    @SpringBootApplication // (exclude= {DataSourceAutoConfiguration.class}) public class Application { public static void main(String[] args) { // 先实例化一个对象 SpringApplication s = new SpringApplication(Application.class); // 将我们自定义的初始化器通过添加进去。注意这里不要用set方法,如果用set方法,那么就会把其他jar配置的覆盖掉 s.addInitializers(new ZyInitializer(), new ZyInitializer1()); // 然后再执行run方法 s.run(args); // SpringApplication.run(Application.class, args); } }

    我们看addInitializers方法。

    public void addInitializers(ApplicationContextInitializer<?>... initializers) { this.initializers.addAll(Arrays.asList(initializers)); }

    这里就是将我们添加的初始化器添加到initializers集合里面。与它自身通过SpringFactoriesLoade相融合。 注意:这里添加一定要在run方法之前添加,不然他不会执行。

    Processed: 0.011, SQL: 9