Springboot之自定义starter

文章目录

  • [1. 前置知识](#1. 前置知识)
  • [2. 什么是starter?](#2. 什么是starter?)
  • [3. 常用的Condition注解说明](#3. 常用的Condition注解说明)
  • [4. starter的命名规范](#4. starter的命名规范)
  • [5. 自定义自己的starter流程](#5. 自定义自己的starter流程)
    • [5.1 创建starter项目](#5.1 创建starter项目)
    • [5.2 添加依赖](#5.2 添加依赖)
    • [5.3 读取并注入配置信息](#5.3 读取并注入配置信息)
    • [5.4 自定义业务类](#5.4 自定义业务类)
    • [5.5 编写自动配置类,把服务注入到Spring中](#5.5 编写自动配置类,把服务注入到Spring中)
    • [5.6 创建spring.factories文件](#5.6 创建spring.factories文件)
    • [5.7 把项目打成jar发布maven仓库](#5.7 把项目打成jar发布maven仓库)
    • [5.8 使用自定义的starter](#5.8 使用自定义的starter)
      • [5.8.1 创建一个springboot项目,导入依赖](#5.8.1 创建一个springboot项目,导入依赖)
      • [5.8.2 在配置文件进行配置](#5.8.2 在配置文件进行配置)
      • [5.8.3 测试类](#5.8.3 测试类)

1. 前置知识

在我们自定义starter的时候,先要了解 Springboot自动装配原理

我们可以参照 mybatis-plus-boot-starter源码来实现我们的自定义starter功能。

涉及案例代码:https://gitee.com/StarSea007/spring-boot-demo

2. 什么是starter?

Starter是一种用于简化依赖管理和配置的方式。它是一个预定义的依赖关系集合, 包含了一组常用的依赖和配置,以便于快速启动和构建特定类型的应用程序。

使用Starter可以大大简化项目的依赖管理和配置工作,提供了一种快速启动和构建特定类型应用程序的方式。

例如,Spring Boot提供了spring-boot-starter-web用于快速构建Web应用程序,它包含了常用的Web依赖(如

Spring MVC、Tomcat等)和相关的自动配置。

开发者也可以自定义自己的Starter,将常用的依赖和配置打包为一个Starter,方便在复用和共享。自定义

Starter可以提供一组特定领域的依赖和配置,以满足开发需求。

3. 常用的Condition注解说明

在加载自动配置类的时候,并不是将spring.factories的配置全部加载进来,而是通过@Conditional等注解的判断进行动态加载

@Conditional其实是spring底层注解,意思就是根据不同的条件,来进行自己不同的条件判断,如果满足指定的条件,那么配置类里边的配置才会生效。

常用的Conditional注解:

  • @ConditionalOnClass : classp ath中存在该类时起效
  • @ConditionalOnMissingClass : classpath中不存在该类时起效
  • @ConditionalOnBean : DI容器中存在该类型Bean时起效
  • @ConditionalOnMissingBean : DI容器中不存在该类型Bean时起效
  • @ConditionalOnSingleCandidate : DI容器中该类型Bean只有一个或 @Primary的只有一个时起效
  • @ConditionalOnExpression : SpEL表达式结果为true时
  • @ConditionalOnProperty : 参数设置或者值一致时起效
  • @ConditionalOnResource : 指定的文件存在时起效
  • @ConditionalOnJndi : 指定的JNDI存在时起效
  • @ConditionalOnJava : 指定的Java版本存在时起效
  • @ConditionalOnWebApplication : Web应用环境下起效
  • @ConditionalOnNotWebApplication : 非Web应用环境下起效

4. starter的命名规范

Spring官方Starter通常命名为 spring-boot-starter-{name}如:spring-boot-starter-web

Spring官方建议非官方Starter命名应遵循 {name}-spring-boot-starter的格式:如 mybatis-spring-boot-starter。

5. 自定义自己的starter流程

5.1 创建starter项目

自定义一个starter,名字是demo-spring-boot-starter。

5.2 添加依赖

xml 复制代码
<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
  </dependency>

  <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
  </dependency>
</dependencies>

5.3 读取并注入配置信息

java 复制代码
@Data
@ConfigurationProperties(prefix = "sea.person")
public class PersonProperties implements Serializable {
    private String name;
    private int age;
}

5.4 自定义业务类

java 复制代码
public class PersonService {

    @Autowired
    private PersonProperties personProperties;

    public String sayHello() {
        return "Hello, name is "+ personProperties.getName() + ", age is " + personProperties.getAge();
    }
}

5.5 编写自动配置类,把服务注入到Spring中

java 复制代码
@Configuration
@EnableConfigurationProperties(PersonProperties.class)
@ConditionalOnClass(PersonService.class)
public class PersonAutoConfiguration {

    @Bean
    public PersonService personService(){
        return new PersonService();
    }
}

5.6 创建spring.factories文件

在资源目录下,创建文件META-INF\spring.factories,指定自动配置类的路径

properties 复制代码
org.springframework.beans.autoconfig.EnableAutoConfiguration=\
  com.sea.config.PersonAutoConfiguration

反斜杠表示换行,太长了可以换到下一行。

5.7 把项目打成jar发布maven仓库

直接使用idea的maven功能进行打包

5.8 使用自定义的starter

5.8.1 创建一个springboot项目,导入依赖

xml 复制代码
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

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

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

    <!--自定义Starter工程-->
    <dependency>
        <groupId>com.sea</groupId>
        <artifactId>demo-spring-boot-starter</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
</dependencies>

5.8.2 在配置文件进行配置

xml 复制代码
sea.person.name=张三
sea.person.age=40

5.8.3 测试类

java 复制代码
@RestController
public class PersonController {

    @Autowired
    private PersonService personService;

    @GetMapping("/sayHello")
    public String sayHello() {
        return personService.sayHello();
    }
}

如果有收获! 希望老铁们来个三连,点赞、收藏、转发。
创作不易,别忘点个赞,可以让更多的人看到这篇文章,顺便鼓励我写出更好的博客

相关推荐
摇滚侠5 分钟前
Spring Boot 3零基础教程,自动配置机制,笔记07
spring boot·笔记·后端
爱编程的小白L2 小时前
基于springboot志愿服务管理系统设计与实现(附源码)
java·spring boot·后端
奋斗的小monkey7 小时前
Spring Boot 3.x核心特性与性能优化实战
java·spring boot·微服务·性能优化·响应式编程
麦芽糖02199 小时前
springboot集成ZeroMQ
java·spring boot·后端
编啊编程啊程10 小时前
兼职管理平台
java·spring boot·rpc·dubbo·nio
陈一Tender11 小时前
JavaWeb后端实战(IOC+DI)
java·spring boot·spring
kakacc:11 小时前
SpringBoot+Hutool+Vue实现导出
java·vue.js·spring boot
行者阿毅13 小时前
langchain4j+SpringBoot+DashScope(灵积)整合
spring boot·langchain·ai编程
ZhengEnCi13 小时前
SpringBoot 配置文件完全指南-从入门到精通
java·spring boot
L7ink13 小时前
解放双手!Moni:一款用 AI 帮你自动记账、分析消费的智能助手
spring boot·openai