Spring 全家桶之 Spring Boot 2.6.4(十)- 自定义Starter

简介: Spring 全家桶之 Spring Boot 2.6.4(十)- 自定义Starter

一、Spring Boot中的Starters

Spring Boot官网中关于Starters的介绍

Starters are a set of convenient dependency descriptors that you can include in your application. You get a one-stop shop for all the Spring and related technologies that you need without having to hunt through sample code and copy-paste loads of dependency descriptors. For example, if you want to get started using Spring and JPA for database access, include the spring-boot-starter-data-jpa dependency in your project.

Starters既启动器是一组方便的依赖项描述符,在项目中应用这些Starters。您可以获得所需的所有Spring和相关技术的一站式服务,而无需查找示例代码和复制-粘贴大量依赖描述符。例如,如果您想开始使用Spring和JPA进行数据库访问,请在您的项目中包含Spring -boot-starter-data-jpa依赖项。

二、自定义Staters

Spring Boot官网中关于自定义Starters的介绍 7.9.5. Creating Your Own Starter

自定义Starter首先要确定场景的依赖,然后自定义Starter会用到以下注解或者配置。需要说明的是启动器是一个空的JAR文件,仅仅提供辅助性的依赖管理,这些依赖可能用于自动装配或者其他类库。

自定义Starter需要遵循一些命名约定

  • Spring Boot 官方Starter的前缀名为”spring-boot-starter-“,命名为“spring-boot-starter-模块名”,如spring-boot-starter-web、spring-boot-starter-jdbc
  • 第三方的Starter后缀名为“-spring-boot-starter”,命名为“模块名-spring-boot-starter”,如”mybatis-spring-boot-starter、druid-spring-boot-starter

首先创建一个Empty Project,将会在这个Project中创建Starter启动器工程lilith-spring-boot-starter和autoconfigure自动配置工程lilith-spring-boot-starter-autconfigure,lilith-spring-boot-starter启动器是一个空的JAR文件,仅仅提供辅助性的依赖管理。

接着在这个空工程里面添加Module,创建一个Maven工程作为启动器Starter lilith-spring-boot-starter。

然后再创建Spring Boot工程作为自动配置类lilith-spring-boot-starter-autconfigure,使用Spring Initializr工具创建

image.png

image.png

至此在这个Empty Project中共创建两个Module,分别是lilith-spring-boot-starter和lilith-spring-boot-starter-autconfigure

image.png

第一个是启动器,第二个是负责自动配置的模块

首先在启动器Starter中引入自动配置模块的依赖,在lilith-spring-boot-starter模块的pom.xml文件中增加

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-configuration-processor</artifactId>
   <optional>true</optional>
</dependency>
复制代码

而lilith-spring-boot-starter-autoconfigure模块主要用来做自动配置,所以该模块下的主程序类以及配置文件和测试包可以删除,在pom.xml文件中只需要引入spring-boot-starter依赖即可,spring-boot-starter是所有starter的基本配置

自定义starter的需求是通过引入starter可以使用该starter中的Lilith类,使用该类可以通过配置打印出不同语言的”Hallo Lilith“

Lilith类代码,包含了一个LilithProperties类,用来定义配置项,hallo方法用来输出文本

public class Lilith {
    private LilithProperties lilithProperties;
    public LilithProperties getLilithProperties() {
        return lilithProperties;
    }
    public void setLilithProperties(LilithProperties lilithProperties) {
        this.lilithProperties = lilithProperties;
    }
    public String hallo(String name){
        return lilithProperties.getLanguages() + " " + name;
    }
}
复制代码

接着需要定义一个配置项的类LilithProperties,使用@ConfigurationProperties标记配置的prefix

@ConfigurationProperties(prefix = "lilith")
@Component
public class LilithProperties {
    // 语种
    private String languages;
    public String getLanguages() {
        return languages;
    }
    public void setLanguages(String languages) {
        this.languages = languages;
    }
}
复制代码

增加一个自动配置类LilithAutoConfiguration

@Configuration
@ConditionalOnWebApplication
@EnableConfigurationProperties(LilithProperties.class)
public class LilithAutoConfiguration {
    @Autowired
    private LilithProperties lilithProperties;
    @Bean
    public Lilith lilith(){
        Lilith lilith = new Lilith();
        lilith.setLilithProperties(lilithProperties);
        return lilith;
    }
}
复制代码

resources目录下创建一个文件夹META-INF/spring.factories

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.lilith.starter.autoconfigure.LilithAutoConfiguration
复制代码

左侧目录结构如下

image.png

自动配置模块完成,自动配置类会往容器中添加Lilith类,Lilith类中用到的属性与LilithProperties类中的属性绑定

image.png

然后install到本地的maven仓库中

三、测试自定义的Starter

使用Spring Initializr工具创建一个新的工程spring-boot-lilith,选择Spring Web依赖即可,再引入自定义的starter,在pom.xml文件中添加以下依赖

<dependency>
    <groupId>com.lilith.starter</groupId>
    <artifactId>lilith-spring-boot-starter</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
复制代码

新建controller包,增加HalloController

@RestController
public class HalloController {
    @Autowired
    private Lilith lilith;
    @GetMapping("/hallo")
    public String hallo(){
        return lilith.hallo("Lilith");
    }
}
复制代码

接着在application.properties中进行配置

lilith.languages=Buon Giorno
复制代码

启动应用,在浏览器输入 http://localhost:8080/hallo

image.png

页面上成功显示了意大利语的你好 Lilith

类似的例子还有阿里巴巴的Druid数据源以及MyBatis Plus,在Druid Starter出现之前都是通过书写配置类的方式既通过@Configuration和@Bean注解将Druid的DataSource导入到容器中,通过引入Stater的方式就可以省略配置类。


相关文章
|
9天前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
21 2
|
1月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
54 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
1月前
|
Java 测试技术 开发者
springboot学习四:Spring Boot profile多环境配置、devtools热部署
这篇文章主要介绍了如何在Spring Boot中进行多环境配置以及如何整合DevTools实现热部署,以提高开发效率。
62 2
|
1月前
|
前端开发 Java 程序员
springboot 学习十五:Spring Boot 优雅的集成Swagger2、Knife4j
这篇文章是关于如何在Spring Boot项目中集成Swagger2和Knife4j来生成和美化API接口文档的详细教程。
101 1
|
1月前
|
Java API Spring
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中拦截器的入门教程和实战项目场景实现的详细指南。
26 0
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
|
1月前
|
Java API Spring
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中过滤器的基础知识和实战项目应用的教程。
24 0
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
|
1月前
|
Java 测试技术 Spring
springboot学习三:Spring Boot 配置文件语法、静态工具类读取配置文件、静态工具类读取配置文件
这篇文章介绍了Spring Boot中配置文件的语法、如何读取配置文件以及如何通过静态工具类读取配置文件。
54 0
springboot学习三:Spring Boot 配置文件语法、静态工具类读取配置文件、静态工具类读取配置文件
|
1月前
|
Java Spring
springboot 学习十一:Spring Boot 优雅的集成 Lombok
这篇文章是关于如何在Spring Boot项目中集成Lombok,以简化JavaBean的编写,避免冗余代码,并提供了相关的配置步骤和常用注解的介绍。
98 0
|
2月前
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
|
1月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
166 2
下一篇
无影云桌面