构造流程源码分析:ApplicationListener加载( 三 )


另外一种配置形式为直接调用 setSources 方法来进行设置 , 方法源代码如下 。
private Set sources = new LinkedHashSet<>();public void setSources (Set sources) {Assert. notNull(sources, "Sources must not be nul1");this. sources = new L inkedHashSet<> ( sources);}该方法的参数为 String 集合 , 可传递类名、package 名称和 XML 配置资源 。 下面我们以类名为例进行演示 。
WithoutAnnoConfiguration 配置类代码如下 。
public class WithoutAnnoConfigurationpublic WithoutAnnoConfiguration(){System. out. println( "Wi thoutAnnoConfiguration 对象被创建");@Value("${ admin. name}")private String name ;@Value( "${admin. age}")private int age;//省略 getter/setter 方法}使用该配置的实例代码如下 。
public static void main(String[] args){SpringApplication app = new SpringApplication(SpringLearnApplication.class);Set set = new HashSet<>();set. add (WithoutAnnoConfiguration. class . getName());app . setSources(set);ConfigurableApplicat ionContext context = app . run(args);WithoutAnnoConfiguration bean = context . getBean(WithoutAnnoConfiguration.class);System. out. println(bean. getName());}运行程序 , 我们在日志中即可看到已经获取到对应类的属性值 。
无论是通过构造参数的形式还是通过 Setter 方法的形式对配置源信息进行指定 , 在 SpringBoot 中都会将其合并 。 SpringApplication 类中提供了 一个 getAllSources 方法 , 能够将两者参数进行合并 。
public Set<0bject> getAllSources() {//创建去除的 L inkedHashSetSet<0bject> allSources = new LinkedHashSet<>();// primarySources 不为空则加入 Setif (!CollectionUtils. isEmpty(this. primarySources)) {allSources . addAll(this . primarySources);// sources 不为空则加入 Setif (!CollectionUtils . isEmpty(this. sources)) {allSources . addAll(this. sources);//对 Set 进行包装 , 变为不可变的 Setreturn Collections . unmodifiableSet(allSources);}}关于 SpringApplication 类指定配置及配置源就讲到这里 , 更多相关配置信息可参考对应章节进行学习 。
小结【构造流程源码分析:ApplicationListener加载】本章内容重点围绕 SpringApplication 类的初始化过程展开 , 详细介绍了在初始化过程中Spring Boot 所 进 行 的 操 作 : Web应用类型推断 、 入 口类 推 断 、 默认的Application-Contextlnitializer 接口加载、默认的 ApplicationListener 加载、SpringApplication类的参数配置功能 ,以及针对这些操作我们能够进行的自定义组件及配置 。 建议大家在学习的过程中可配合相应的实战练习 , 获得更好的学习效果 。
本文给大家讲解的内容是ApplicationListener加载和入口类推断、SpringApplication 的定制化配置

  1. 下篇文章给大家讲解的是SpringBoot运行流程源码分析;
  2. 觉得文章不错的朋友可以转发此文关注小编;
  3. 感谢大家的支持!


推荐阅读