springboot_扩展点

1.ApplicationContextInitializer容器刷新之前调用

public class MyApplicationContextInitializer implements ApplicationContextInitializer {
    public void initialize(ConfigurableApplicationContext applicationContext) {
        System.out.println("bean的数量有"+applicationContext.getBeanDefinitionCount());
    }
}
@SpringBootApplication
public class Springboot9Application {

    public static void main(String[] args) {
        SpringApplication application = new SpringApplication(Springboot9Application.class);
        application.addInitializers(new MyApplicationContextInitializer());
        ConfigurableApplicationContext context = application.run(args);
        context.close();

    }
}
注册方法
1.application.addInitializers(new MyApplicationContextInitializer());

2
context.initializer.classes=com.fz.song.one.MyApplicationContextInitializer

多个使用逗号分隔

3.
使用META-INF/spring.factories指定
第三方项目
public class BaseApplicationContextInitializer implements ApplicationContextInitializer {
    @Override
    public void initialize(ConfigurableApplicationContext applicationContext) {
        System.out.println("----------------------------BaseApplicationContextInitializer----------------------------");
    }
}
org.springframework.context.ApplicationContextInitializer=com.fz.fz.song.initializer.BaseApplicationContextInitializer

注意(监听器的也可以这么注册)

这种方式侵入性最小

可以不改变源码的基础上加载bean

CommandLineRunner

最后一个回调
/**
 *在容器启动之后的最后一步回调.
 * 
 */
@Component
public class ServerSuccess implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        System.out.println("---------------------------成功启动---------------------------");
    }
}
/**
 * CommandLineRunner和ApplicationRunner作用相似
 * 只是参数不一致
 * CommandLineRunner是原始参数,
 * ApplicationRunner是处理过的参数
 * 
 */

猜你喜欢

转载自www.cnblogs.com/songfahzun/p/9255921.html