构造流程源码分析: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 的定制化配置
- 下篇文章给大家讲解的是SpringBoot运行流程源码分析;
- 觉得文章不错的朋友可以转发此文关注小编;
- 感谢大家的支持!
推荐阅读
- Git服务器配置错误导致日产汽车源码在网上泄露
- 用户|操作流程更优、功能更多、信息更加安全,你的“随申码”改版升级啦
- 健康|“健康连云港服务号”微信小程序发布,打通医疗健康全流程
- 禁止拷贝构造,禁止bug
- C语言火车订单管理源码
- Spring Application实例化流程和构造方法参数
- 工业机械手臂外部模式使用流程及注意事项
- 清华教授整理535本编程电子书+视频教程+项目源码限时领取
- 掌握会用了,为什么还要源码学习?
- 阿里爆款SpringBoot项目实战PDF+源码+视频分享