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是处理过的参数 * */