多平台统一管理软件接口,如何实现多平台统一管理软件接口
288
2022-12-05
SpringBoot上下文初始器加载过程详解
利用 Spring 工厂加载机制,实例化 ApplicationContexQiJUqATtInitializer 实现类,并排序对象集合。
关键方法
private
Class>[] parameterTypes, Object... args) {
ClassLoader classLoader = Thread.currentQiJUqATThread().getContextClassLoader();
// Use names and ensure unique to protect against duplicates
Set
SpringFactoriesLoader.loadFactoryNames(type, classLoader));
List
classLoader, args, names);
AnnotationAwareOrderComparator.sort(instances);
return instances;
}
技术实现步骤
实现类: org.springframework.core.io.support.SpringFactoriesLoader
配置资源: META-INF/spring.factories
排序: AnnotationAwareOrderComparator#sort
自定义初始化器
编写类实现ApplicationContextInitializer接口
有两种指定顺序的方法,第一种:类上加注解@Order(Ordered.HIGHEST_PRECEDENCE),第二种则是实http://现Ordered接口
@Order(Ordered.HIGHEST_PRECEDENCE)
public class HelloWorldApplicationContextInitializer
implements ApplicationContextInitializer
@Override
public void initialize(C applicationContext) {
System.out.println("ConfigurableApplicationContext.id = "+ applicationContext.getId());
}
}
public class AfterHelloWorldApplicationContextInitializer implements ApplicationContextInitializer, Ordered {
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
System.out.println("After application.id = " + applicationContext.getId());
}
@Override
public int getOrder() {
return Ordered.LOWEST_PRECEDENCE;
}
}
在spring.properties中配置
# ApplicationContextInitializer
org.springframework.context.ApplicationContextInitializer=\
com.imooc.diveinspringboot.context.AfterHelloWorldApplicationContextInitializer,\
com.imooc.diveinspringboot.context.HelloWorldApplicationContextInitializer
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~