美文网首页Spring Boot程序员Java学习笔记
学习spring-boot(三)之自定义starter

学习spring-boot(三)之自定义starter

作者: 骑驴上塔楼 | 来源:发表于2017-02-25 23:02 被阅读3210次

    本篇文档将来介绍如何创建一个spring-boot-starter,来向spring-boot中添加自定义的依赖。

    spring官方文档中也有关于这个的说明,你们也可移步这里去查看。

    背景

    spring-boot里面包含的功能已经十分丰富了,但是有些时候,我们还是需要加入一些不包含在这些模块之中的功能。但又想使之成为优雅的,可重用的组件。于是,我们就想是否能仿造spring-boot中其他组件一样的进行导入和管理。
    答案是肯定的。下面我们就一期来跟着官方文档来一步一步的完成一个demo。

    开始

    命名

    假设你的组件名为foo,那么你将包含如下4个工程

    • foo-spring-boot
    • foo-spring-boot-starter
    • foo-spring-boot-autoconfigue
    • foo-spring-boot-example

    新建

    新建一个maven项目,其packagepom,比如下面这个

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        
        <groupId>com.piggsoft</groupId>
        <artifactId>beetl-spring-boot</artifactId>
        <version>0.0.1</version>
        <packaging>pom</packaging>
    </project>
    

    紧接着你将在这个项目下建立2个modulebeetl-spring-boot-starterbeetl-spring-boot-autoconfigue
    其中starter将是一个空项目,管理依赖和载入,在startersrc/main/resources/META-INF下创建一个名为spring.providers的文件。

    provides: beetl-spring-boot-autoconfigue, beetl-core
    

    其中autoconfigue是导入的主要工程,在autoconfiguesrc/main/resources/META-INF下创建一个名为spring.factories的文件,该文件将告知spring-boot,这个autoconfigue的初始类是哪一个。

    org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
    com.piggsoft.beetl.spring.boot.autoconfigue.BeetlAutoConfiguration
    

    编写自动装配的逻辑

    编写这个逻辑还需要了解Condition annotations

    例子如下

    @Configuration
    @EnableConfigurationProperties(BeetlProperties.class)
    public class BeetlAutoConfiguration {
    }
    

    其中BeetlProperties,为配置信息定义类,从application.yml中获取对应的信息

    然后通过spring的@Bean之类的注解进行装载。

    附:Demo下载,请点击这里

    相关文章

      网友评论

        本文标题:学习spring-boot(三)之自定义starter

        本文链接:https://www.haomeiwen.com/subject/iienwttx.html