如何在SpringBoot中创建自己的启动器?

栏目: Java · 发布时间: 7年前

内容简介:也许你有一个内部库包或一个在整个应用程序环境中常用的开源库,如果要在多个Spring Boot应用程序中使用它,为它创建一个Spring Boot启动器可能会很有用。Spring Boot启动器包含两个模块:让我们看一下名为@autoconfiguration的机制。这听起来比实际更复杂。

也许你有一个内部库包或一个在整个应用程序环境中常用的开源库,如果要在多个Spring Boot应用程序中使用它,为它创建一个Spring Boot启动器可能会很有用。

总观

Spring Boot启动器包含两个模块:

  1. 自动配置 ,这是执行繁重工作和设置模块
  2. 启动 启动程序模块,它将您的lib库包、@autoconfiguration和所有依赖项包装在一个依赖项中

让我们看一下名为@autoconfiguration的机制。这听起来比实际更复杂。

在启动时,Spring Boot会扫描类路径, 查找 位于 META-INF 目录中名为 spring.factories的 所有文件,并对其进行处理。这些文件包含单个键 org.springframework.boot.autoconfigure.EnableAutoConfiguration = ,其值设置为常规 @Configurtion 类的列表。

它会检查每个 @Configurtion 是否应该包含它并最终使用它。所谓使用就是加入Spring上下文,这样能被别人发现,通过@autowired自动注入这些类。

当Spring Boot考虑使用它时,将添加条件; 就像 @ConditionalOnClass 一样,它添加了一个条件,只有当类路径中存在指定的 @Configurtion 类时才会将这个类包含进来。

实现自动配置

Spring Boot建议为模块命名模式: -spring-boot-autoconfigure 还要声明我们应该为所有属性添加前缀,以免弄乱任何名称空间。让我们尊重它。

比如这里我们的模块将命名为 request-logging-spring-boot-autoconfigure, 并包含两个类 - @ Confiration类和一个属性类,用于公开可在 application.properties中 配置的一些属性。

让我们从pom开始吧。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot</artifactId>
    <version>${spring-boot.version}</version>
    </dependency>

    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-autoconfigure</artifactId>
    <version>${spring-boot.version}</version>
    </dependency>

    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <version>${spring-boot.version}</version>
    <optional>true</optional>
    </dependency>

前两个依赖项是使用Spring Boot和自动配置类, spring-boot-configuration-processor 是一个从 @ConfigurationProperties 创建元数据文件的工具

下面是配置属性类

@ConfigurationProperties(prefix = "com.requestlogging")
public class RequestLoggingProperties {

 .....
}

下面一步定义 RequestLoggingAutoConfiguration :我们使用 @EnableConfigurationProperties 启用属性 并添加两个条件:

  1. @ConditionalOnWebApplication 表示只有Spring Boot应用程序是Web应用程序时才包含我们的配置。
  2. @ConditionalOnClass 定义 RequestContextLoggingFilter 必须存在于类路径才能包含配置它。
@Configuration
@ConditionalOnWebApplication
@ConditionalOnClass(RequestContextLoggingFilter.class)
@EnableConfigurationProperties(RequestLoggingProperties.class)
public class RequestLoggingAutoConfiguration {

   @Autowired
   private RequestLoggingProperties requestLoggingProperties;

   @Bean
   @Order(1)
   @ConditionalOnMissingBean
   public RequestContextLoggingFilter requestContextLoggingFilter() {
      return new RequestContextLoggingFilter(requestLoggingProperties.getRequestHeaderId(),
            requestLoggingProperties.getLogIdentifier());
   }
}

如果Spring Boot包含了我们这个配置,那么如果 @ConditionalOnMissingBean 有效,它将初始化我们的过滤器bean:new一个RequestContextLoggingFilter实例 。只有当我们的Spring上下文中没有bean存在,我们的bean才会被初始化。

使用autoconfigure模块, Spring建议为启动器命名模式: -spring-boot-starter . 这里我们命名为 request-logging-spring-boot-starter

<dependency>
<groupId>com.jdon</groupId>
<artifactId>request-logging-spring-boot-autoconfigure</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>

启动器需要包含使此启动器工作的所有活动依赖项,否则无法工作。

这样别人就可以使用上面配置使用你的库包了。

Spring Boot


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

超简单!一学就懂的互联网金融

超简单!一学就懂的互联网金融

视觉图文 / 人民邮电出版社 / 2015-2-1 / 45.00元

零基础、全图解,通过130多个精辟的知识点、220多张通俗易懂的逻辑图表,让您一书在手,即可彻底看懂、玩转互联网金融从菜鸟成为达人,从新手成为互联网金融高手! 本书主要特色:最简洁的版式+最直观的图解+最实用的内容。 本书细节特色:10章专题内容详解+80多个特别提醒奉献+130多个知识点讲解+220多张图片全程图解,深度剖析互联网金融的精华之处,帮助读者在最短的时间内掌握互联网金融知......一起来看看 《超简单!一学就懂的互联网金融》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具