SpringFactoriesLoader作用:

  1. 框架内部使用的通用工厂加载机制。
  2. 从classpath下多个jar包特定的位置读取文件并初始化类
  3. 文件内容必须是kv形式,即properties
  4. key是全限定名(抽象类|接口)、value是实现,多个实现用,分离
  • SpringBoot框架中从类路径jar中读取特定文件实现扩展类的载入

2.SpringBoot工厂加载机制解析- SpringFactoriesLoader
  • 执行流程流程

2.SpringBoot工厂加载机制解析- SpringFactoriesLoader


2.SpringBoot工厂加载机制解析- SpringFactoriesLoader

存在问题

  1. 介绍一下SpringFactoriesLoader: SpringFactoriesLoader是Spring工厂加载类。SpringBoot用它来实现扩展点的载入
  2. SpringFactoriesLoader如何加载工厂类:读取指定路径下的spring.factories文件,将其读取成为一个properties对象。依次遍历文件内容,然后将其组装成类名以及对应的实现,然后以此去遍历实例化,最后通过order进行排序。
  3. 系统初始化的作用:它是SpringBoot容器的一个回调接口,可以通过它向SpringBoot容器去定义一些初始化的属性。
  4. 系统初始化器调用时机:是在SpringBootApplication的run方法中,prepareContext当中去调用的。
  5. 如何自定义实现系统初始化器:

有三种实现方式: 先新建一个初始化器类实现ApplicationContextInitializer<ConfigurableApplicationContext>。然后

  • 通过资源文件夹新建META-INF文件夹。创建spring.factories文件,指定key为ApplicationContextInitializer。
  • 重新SpringBoot启动函数,通过硬编码方式,在初始化SpringApplication之后,通过addInitializer方法将自定义系统初始化器加入进去。
  • 通过配置文件配置属性context.initializer.classes=xxxInitializer的方式进行设置。多个可以用逗号隔开。
  1. 自定义实现系统初始化器有哪些注意事项:order值的排序问题,以及不同实现方式导致order值失效的问题。

相关文章: