Skip to content

Latest commit

 

History

History
105 lines (75 loc) · 4.49 KB

99-自定义启动器starter.md

File metadata and controls

105 lines (75 loc) · 4.49 KB

SpringBoot自定义启动器

一个完整的SpringBoot启动器包含以下几个部分:

  • autoconfigure 模块包含自动配置的代码
  • starter 模块提供自动配置的常用的依赖;简而言之,添加starter应该提供开始使用该库所需的一切。

你可以在一个模块中组合自动配置的代码和依赖管理。

命名

你需要确保为启动器提供一个合适的命名空间。

  • 不要使用spring-boot开头,这通常是官方预留的。

一个经验法则是,你应该在。 例如,假设你为"acme"创建了一个启动器,你命名自动配置模块为 acme-spring-boot-autoconfigure。将启动器命名为acme-spring-boot-starter。 如果你有一个模块是由这两个组合的,将其命名为acme-spring-boot-starter

同样,如果你的启动器提供了配置keys,给他们使用唯一的命名空间。 特别的,不要在你的keys中包含Spring Boot使用的诸如:servermanagementspring等等。 如果你是用相同的命名空间,将来可能以破坏模式的方式修改这些命名空间。

确保触发元数据生成,以便可以使用IDE帮助。你可能想检阅一下生成的元数据(META-INF/spring-configuration-metadata.json)以确保你的keys被合适地文档化了。

autoconfigure 模块

autoconfigure 模块包含了任何你需要用到的。也可能包含配置key的定义(例如@ConfigurationProperties)和任何回调接口(用于未来自定义怎样初始化组件)。

您应该将库的依赖项标记为可选的,这样就可以更容易地在项目中包含autoconfigure模块。

Spring Boot 使用一个注解处理器收集在元数据文件META-INF/spring-autoconfigure-metadata.properties符合自动配置的条件。 如果该文件存在的话,则使用它过滤不匹配的自动配置,这会加快启动时间。

推荐在包含自动配置的模块中使用以下依赖:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-autoconfigure-processor</artifactId>
	<optional>true</optional>
</dependency>

参考开源实战

这里我们选择一个github开源的集成swagger的项目:

<groupId>com.spring4all</groupId>
<artifactId>swagger-spring-boot-starter</artifactId>
<version>1.9.0.RELEASE</version>

可以看到项目组成比较简单:

步骤

  • 创建springboot项目

  • 引入需要依赖的坐标

  • 编写一个获取配置属性的类com.spring4all.swagger.SwaggerProperties

    •     @ConfigurationProperties("swagger")
          public class SwaggerProperties {
              ...
          }
  • 编写配置类com.spring4all.swagger.SwaggerAutoConfiguration

    •     @Configuration
          @Import({Swagger2Configuration.class})
          public class SwaggerAutoConfiguration implements BeanFactoryAware {
              ...
          }
  • resources/META-INF/spring.factories中加入这个AutoConfiguration:

    •     org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
          com.spring4all.swagger.SwaggerAutoConfiguration
  • 添加该starter依赖,并且设置properties:

    •     swagger.url=localhost:11111

在测试类运行时则会加载swagger.url属性。

总结

自定义springboot的starter,注意这几点:

  • 如果自动化配置类需要在程序启动的时候就加载,可以在META-INF/spring.factories文件(该文件在SpringBootApplication.run方法执行的时候会加载)中定义。
  • 如果本次加载还需要其他一些lib类的话,可以使用ConditionalOnClass注解协助
  • 如果自动化配置类要在使用自定义注解后才加载,可以使用自定义注解+@Import注解@ImportSelector注解完成

参考资料