源码:
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相关推荐

  1. 读《Oracle DBA工作笔记》知识点-获取创建语句

    一.    使用dbms_metadata.get_ddl 1.获取表空间的创建语句 select dbms_metadata.get_ddl('TABLESPACE',ts.tablespace_n ...

  2. EBS-自动获取/创建CCID

    参考:http://blog.csdn.net/rfb0204421/article/details/8204097 DECLARE l_ccid NUMBER;   l_msg  VARCHAR2( ...

  3. nullnull使用PL/SQL获取创建用户的语句

    在写这篇文章之前,xxx已经写过了几篇关于改nullnull主题的文章,想要了解的朋友可以去翻一下之前的文章 Create procedure: create or replace procedure ...

  4. Oracle GL - 使用标准程序获取/创建CCID

    例如已知某账户组合,欲检索 CCID,若使用 GL_CODE_COMBINATIONS_KFV 将会消耗很长时间,而使用 FND_FLEX_EXT.GET_CCID 则能大大节省时间. SELECT ...

  5. Mac系统下获取/创建ssh key

    查看ssh是否已经安装 cd ~/.ssh ls // 显示 'known_hosts' 表示没有 生成SSH Keys 在终端中输入以下命令,填写自己的邮箱 ssh-keygen -t rsa -C ...

  6. VC++ 获取文件属性创建时间、修改时间和访问时间

    转载:http://blog.sina.com.cn/s/blog_66bf8d8301014ikd.html WIN32_FIND_DATA结构 关于文件的全部属性信息,总计有以下以下9 种:文件的 ...

  7. oracle建表语句string,编程式Mybatis获取oracle表创建表语句

    写在前面 Mybatis之前使用过一段时间,当然只是粗糙地使用,而且配合Spring有一部分Mybatis管理的内容都交给了Spring,加上一段时间没用到又开始忘了,刚好今天碰到一个要求,Oracl ...

  8. Oracle中一把梭获取对象DDL创建语句

    文章目录 1.DBMS_METADATA.GET_DDL包详解以及使用案例 1.1.官方文档参考 1.2.常用获取ddl信息案例 1.2.1.查看表以及对应索引创建语句 1.2.2.获取用户下所有对象 ...

  9. arm服务器获取文件路径中文,ssh 访问远程服务器文件路径

    ssh 访问远程服务器文件路径 内容精选 换一换 在IntelliJ上选择"项目",找到".idea"文件夹,单击右键选择"新建>文件" ...

最新文章

  1. 使用Spring+CXF开发WebService
  2. [Qt入门]模态和非模态对话框创建
  3. PyCharm设置背景颜色
  4. idea 2020和2017下载
  5. xshell5登录不上,让更新,结果还是不行的解决方法
  6. 别告诉我你懂Javascript
  7. c语言不使用加运算符做加法运算
  8. ORC File文件结构
  9. 重庆地区外卖店铺分析系统的设计与实现
  10. 光量子计算机技术突破,真正突破光刻机封锁的技术诞生了!可编程光量子计算芯片是什么?...
  11. PHP-简单的留言薄功能
  12. python中如何打开csv文件_Python如何读取csv文件
  13. Python基础刻意练习:字典与集合
  14. element-ui表格中表头表内容的居中左右对齐
  15. 功利主义穆勒思维导图_穆勒功利主义读书笔记
  16. vue input输入框事件
  17. .Net 中关于序列化和反序列化Json的方法
  18. 【数分书单】分析思维《一本小小的蓝色逻辑书》第三章小结
  19. matlab 回归 工具箱,matlab回归分析工具箱
  20. 农历与西历对照、万年历

热门文章

  1. 华为c语言中static的作用,C语言编程规范(华为、林锐、MISRAC).pdf
  2. mybatis plus 日志打印_Mybatis-plus常用API全套教程,看完没有不懂的
  3. MyBatis3源码解析(8)MyBatis与Spring的结合
  4. 定时线程的使用 java_Java线程Timer定时器用法详细总结
  5. MATLAB信号处理之信号的积分和微分
  6. 安卓手机安装并使用自动化应用Tasker
  7. JAVA字符串功能,Java分析字符串功能
  8. Oracle的join默认为,oracle join用法
  9. html如何去掉有无标题点,HTML中,如何去掉某个元素下的一些特殊标签?
  10. wxpython 隐藏_使用cxFreeze冻结wxPython应用程序时如何隐藏控制台窗口?