SpringBoot上下文初始器加载过程详解

网友投稿 260 2022-12-05


SpringBoot上下文初始器加载过程详解

利用 Spring 工厂加载机制,实例化 ApplicationContexQiJUqATtInitializer 实现类,并排序对象集合。

关键方法

private Collection getSpringFactoriesInstances(Class type,

Class>[] parameterTypes, Object... args) {

ClassLoader classLoader = Thread.currentQiJUqATThread().getContextClassLoader();

// Use names and ensure unique to protect against duplicates

Set names = new LinkedHashSet<>(

SpringFactoriesLoader.loadFactoryNames(type, classLoader));

List instances = createSpringFactoriesInstances(type, parameterTypes,

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小时内删除侵权内容。

上一篇:使用SpringBoot简单了解Druid的监控系统的配置方法
下一篇:SpringBoot加载应用事件监听器代码实例
相关文章

 发表评论

暂时没有评论,来抢沙发吧~