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();
    }
}

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

相关推荐
IT毕设实战小研4 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
一只爱撸猫的程序猿5 小时前
使用Spring AI配合MCP(Model Context Protocol)构建一个"智能代码审查助手"
spring boot·aigc·ai编程
甄超锋5 小时前
Java ArrayList的介绍及用法
java·windows·spring boot·python·spring·spring cloud·tomcat
武昌库里写JAVA8 小时前
JAVA面试汇总(四)JVM(一)
java·vue.js·spring boot·sql·学习
Pitayafruit9 小时前
Spring AI 进阶之路03:集成RAG构建高效知识库
spring boot·后端·llm
zru_96029 小时前
Spring Boot 单元测试:@SpyBean 使用教程
spring boot·单元测试·log4j
甄超锋9 小时前
Java Maven更换国内源
java·开发语言·spring boot·spring·spring cloud·tomcat·maven
还是鼠鼠10 小时前
tlias智能学习辅助系统--Maven 高级-私服介绍与资源上传下载
java·spring boot·后端·spring·maven
灵魂猎手11 小时前
3. MyBatis Executor:SQL 执行的核心引擎
java·后端·源码
舒一笑15 小时前
Started TttttApplication in 0.257 seconds (没有 Web 依赖导致 JVM 正常退出)
jvm·spring boot·后端