1.2、获取、创建 ApplicationContextInitializer
initialize
// **************** org.springframework.boot.SpringApplication ******************/
private List<ApplicationContextInitializer<?>> initializers;private void initialize(Object[] sources) {//略...setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class));//略...
}
private List<ApplicationContextInitializer<?>> initializers;
public void setInitializers(Collection<? extends ApplicationContextInitializer<?>> initializers) {this.initializers = new ArrayList<ApplicationContextInitializer<?>>();this.initializers.addAll(initializers);
}
(1)创建所有 classpath 下所有 “Initializer”对象
源码:
initialize
|- getSpringFactoriesInstances
// **************** org.springframework.boot.SpringApplication ******************/
private <T> Collection<? extends T> getSpringFactoriesInstances(Class<T> type) {return getSpringFactoriesInstances(type, new Class<?>[] {});
}
private <T> Collection<? extends T> getSpringFactoriesInstances(Class<T> type,Class<?>[] parameterTypes, Object... args) {ClassLoader classLoader = Thread.currentThread().getContextClassLoader();// Use names and ensure unique to protect against duplicatesSet<String> names = new LinkedHashSet<String>(SpringFactoriesLoader.loadFactoryNames(type, classLoader));List<T> instances = createSpringFactoriesInstances(type, parameterTypes,classLoader, args, names);AnnotationAwareOrderComparator.sort(instances);return instances;
}
(1.1)获取 classpath 下所有 “Initializer” 的全类名
源码:
initialize
|- getSpringFactoriesInstances
|- SpringFactoriesLoader.loadFactoryNames
SpringFactoriesLoader.loadFactoryNames()
方法在classpath下遍历 “META-INF/spring.factories” 文件,最终将这个文件中所有factoryClass指定类型的全类名解析出来,放入ArrayList中作为返回值
// **************** org.springframework.core.io.support.SpringFactoriesLoader ******************/
public static final String FACTORIES_RESOURCE_LOCATION = "META-INF/spring.factories";public static List<String> loadFactoryNames(Class<?> factoryClass, ClassLoader classLoader) {String factoryClassName = factoryClass.getName();try {Enumeration<URL> urls = (classLoader != null ? classLoader.getResources(FACTORIES_RESOURCE_LOCATION) :ClassLoader.getSystemResources(FACTORIES_RESOURCE_LOCATION));List<String> result = new ArrayList<String>();while (urls.hasMoreElements()) {//本例中,其中一个spring.factories为://jar:file:/D:/../org/springframework/boot/spring-boot/1.5.9.RELEASE///spring-boot-1.5.9.RELEASE.jar!/META-INF/spring.factoriesURL url = urls.nextElement();// 将文件解析为Properties 类型Properties properties = PropertiesLoaderUtils.loadProperties(new UrlResource(url));// 从Properties文件中获取key为 factoryClassName 的值String factoryClassNames = properties.getProperty(factoryClassName);// 逗号分隔的字符串解析为String[],然后转为List放入resultresult.addAll(Arrays.asList(StringUtils.commaDelimitedListToStringArray(factoryClassNames)));}return result;}catch (IOException ex) {throw new IllegalArgumentException("Unable to load [" + factoryClass.getName() +"] factories from location [" + FACTORIES_RESOURCE_LOCATION + "]", ex);}
}返回结果:
names = {LinkedHashSet@1647} size = 60 = "o.s.b.context.ConfigurationWarningsApplicationContextInitializer"1 = "o.s.b.context.ContextIdApplicationContextInitializer"2 = "o.s.b.context.config.DelegatingApplicationContextInitializer"3 = "o.s.b.context.embedded.ServerPortInfoApplicationContextInitializer"4 = "o.s.b.autoconfigure.SharedMetadataReaderFactoryContextInitializer"5 = "o.s.b.autoconfigure.logging.AutoConfigurationReportLoggingInitializer"
1.2、获取、创建 ApplicationContextInitializer相关推荐
- 读《Oracle DBA工作笔记》知识点-获取创建语句
一. 使用dbms_metadata.get_ddl 1.获取表空间的创建语句 select dbms_metadata.get_ddl('TABLESPACE',ts.tablespace_n ...
- EBS-自动获取/创建CCID
参考:http://blog.csdn.net/rfb0204421/article/details/8204097 DECLARE l_ccid NUMBER; l_msg VARCHAR2( ...
- nullnull使用PL/SQL获取创建用户的语句
在写这篇文章之前,xxx已经写过了几篇关于改nullnull主题的文章,想要了解的朋友可以去翻一下之前的文章 Create procedure: create or replace procedure ...
- Oracle GL - 使用标准程序获取/创建CCID
例如已知某账户组合,欲检索 CCID,若使用 GL_CODE_COMBINATIONS_KFV 将会消耗很长时间,而使用 FND_FLEX_EXT.GET_CCID 则能大大节省时间. SELECT ...
- Mac系统下获取/创建ssh key
查看ssh是否已经安装 cd ~/.ssh ls // 显示 'known_hosts' 表示没有 生成SSH Keys 在终端中输入以下命令,填写自己的邮箱 ssh-keygen -t rsa -C ...
- VC++ 获取文件属性创建时间、修改时间和访问时间
转载:http://blog.sina.com.cn/s/blog_66bf8d8301014ikd.html WIN32_FIND_DATA结构 关于文件的全部属性信息,总计有以下以下9 种:文件的 ...
- oracle建表语句string,编程式Mybatis获取oracle表创建表语句
写在前面 Mybatis之前使用过一段时间,当然只是粗糙地使用,而且配合Spring有一部分Mybatis管理的内容都交给了Spring,加上一段时间没用到又开始忘了,刚好今天碰到一个要求,Oracl ...
- Oracle中一把梭获取对象DDL创建语句
文章目录 1.DBMS_METADATA.GET_DDL包详解以及使用案例 1.1.官方文档参考 1.2.常用获取ddl信息案例 1.2.1.查看表以及对应索引创建语句 1.2.2.获取用户下所有对象 ...
- arm服务器获取文件路径中文,ssh 访问远程服务器文件路径
ssh 访问远程服务器文件路径 内容精选 换一换 在IntelliJ上选择"项目",找到".idea"文件夹,单击右键选择"新建>文件" ...
最新文章
- 使用Spring+CXF开发WebService
- [Qt入门]模态和非模态对话框创建
- PyCharm设置背景颜色
- idea 2020和2017下载
- xshell5登录不上,让更新,结果还是不行的解决方法
- 别告诉我你懂Javascript
- c语言不使用加运算符做加法运算
- ORC File文件结构
- 重庆地区外卖店铺分析系统的设计与实现
- 光量子计算机技术突破,真正突破光刻机封锁的技术诞生了!可编程光量子计算芯片是什么?...
- PHP-简单的留言薄功能
- python中如何打开csv文件_Python如何读取csv文件
- Python基础刻意练习:字典与集合
- element-ui表格中表头表内容的居中左右对齐
- 功利主义穆勒思维导图_穆勒功利主义读书笔记
- vue input输入框事件
- .Net 中关于序列化和反序列化Json的方法
- 【数分书单】分析思维《一本小小的蓝色逻辑书》第三章小结
- matlab 回归 工具箱,matlab回归分析工具箱
- 农历与西历对照、万年历
热门文章
- 华为c语言中static的作用,C语言编程规范(华为、林锐、MISRAC).pdf
- mybatis plus 日志打印_Mybatis-plus常用API全套教程,看完没有不懂的
- MyBatis3源码解析(8)MyBatis与Spring的结合
- 定时线程的使用 java_Java线程Timer定时器用法详细总结
- MATLAB信号处理之信号的积分和微分
- 安卓手机安装并使用自动化应用Tasker
- JAVA字符串功能,Java分析字符串功能
- Oracle的join默认为,oracle join用法
- html如何去掉有无标题点,HTML中,如何去掉某个元素下的一些特殊标签?
- wxpython 隐藏_使用cxFreeze冻结wxPython应用程序时如何隐藏控制台窗口?