自定义 Spring boot starter

spring boot 命名规则:

官方发布的:spring-boot-starter-{name}
自定义的:{name}-spring-boot-starter

ImportSelector导入外部配置的核心接口:

CustomImportSelector 实现了ImportSelector
@Import (CustomImportSelector.class)
Spring 启动时会调用 CustomImportSelector.selectImports() 将返回的类信息加载到IOC

ImportBeanDefinitionRegistrar 注入Bean:

与@Import一起使用

spring boot 中的starter 是如何自动加载的呢?

  1. spring-boot-starter 中引用了spring-boot-autoconfigure
  2. @SpringBootApplication 导入 @EnableAutoConfiguration 注解;@EnableAutoConfiguration 通过@Import 导入了AutoConfigurationImportSelector
  3. AutoConfigurationImportSelector 通过 loadMetadata 加载 “META-INF/spring-autoconfigure-metadata.properties” 自动装配的元数据信息
  4. AutoConfigurationImportSelector 通过 getAutoConfigurationEntry 的getCandidateConfigurations()通过该SPI 调用SpringFactoriesLoader.loadFactoryNames (EnableAutoConfiguration.class,classLoader) 加载 "META-INF/spring.factories"文件;返回所有加载到的类信息。
  5. AutoConfigurationImportSelector.selectImports 返回了spring.factories 的 配置文件。这样就注入了spring.factories中的class


    image.png
META-INF/spring.factories:

当导入 EnableAutoConfiguration ,spring 会自动加载 META-INF/spring.factories,解析此文件需要配合 spring-autoconfigure-metadata.properties 的condition 条件

META-INF/spring-autoconfigure-metadata.properties

加载 META-INF/spring.factories 文件中 org.springframework.boot.autoconfigure.EnableAutoConfiguration 配置的类的condition
示例:

META-INF/spring-autoconfigure-metadata.properties 配置如下:
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration.ConditionalOnClass=com.rabbitmq.client.Channel,org.springframework.amqp.rabbit.core.RabbitTemplate
META-INF/spring.factories 配置如下:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration

解释: 若要加载 org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration 必须要在classPath 中存在 com.rabbitmq.client.Channel,org.springframework.amqp.rabbit.core.RabbitTemplate

你可能感兴趣的:(自定义 Spring boot starter)