一.Spring Boot 扩展分析之ApplicationContextInitializer
说明
在printBanner之后调用.在refresh()方法之前调用.
使用
创建实现接口类.将该类按下面使用方式:
1.run之前将对象直接加入到application.例如:
public static void main(String[] args) {
SpringApplication application = new SpringApplication(StartApplication.class);
application.addInitializers(new MyApplicationContextInitializer());
application.run(args);
}
2.在配置文件application.properties文件中加入
context.initializer.classes=com.demo.framework.security.common.MyApplicationContextInitializer
3.在META-INF/spring.factories中配置.例如
org.springframework.context.ApplicationContextInitializer=\
com.demo.framework.security.common.MyApplicationContextInitializer
二.Spring Boot 扩展分析之ApplicationRunner
和CommandLineRunner
说明:
全部初始化完了之后的回调
使用:
1.实现ApplicationRunner
或者CommandLineRunner接口.把该类纳入spring容器中即可
2.同时注入多个实例时,可通过@order(1)注解或者实现org.springframework.core.Ordered;接口控制先后顺序.order中的值越小.越先执行.最终排序原理为:
AnnotationAwareOrderComparator.sort(runners);
两个接口的区别和用处
1.ApplicationRunner提供ApplicationArguments args.是springboot对main方法中参数封装之后的参数(解析好了.以key-value形式存在的.方便处理)
2.CommandLineRunner提供main方法中String... args .是原始的参数没有做任何处理.直接就是字符串.不方便处理