Springboot3自定义starter笔记

场景:抽取聊天机器人场景,它可以打招呼。 效果:任何项目导入此 starter

都具有打招呼功能,并且问候语中的人名需要可以在配置文件中修改。

  1. 创建自定义 starter 项目,引入 spring-boot-starter 基础依赖。
xml 复制代码
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
  1. 编写模块功能,引入模块所有需要的依赖。
  2. 编写 xxxAutoConfiguration 自动配置类,帮其他项目导入这个模块需要的所有组件。
  3. 编写配置文件 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports指定启动需要加载的自动配置。
  4. 其他项目引入即可使用

业务代码

java 复制代码
@Service
public class RobotService {

    @Autowired
    RobotProperties robotProperties;

    public String sayHello(){
        return "hello"+robotProperties.getName()+":"+robotProperties.getAge()+"邮箱"+robotProperties.getEmail();
    }
}

写下面代码为了进行属性绑定,配置文件(application.properties)配了什么属性项这个类里面都可以直接进行绑定关联(在配置文件中写的数据通过这个配置文件,在业务代码中引入RobotProperties robotProperties并进行自动注入,就会通过这个来获取配置文件中的属性)

java 复制代码
@ConfigurationProperties(prefix = "robot")
@Component
@Data
public class RobotProperties {
    private String name;
    private String age;
    private String email;
}
复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

基本抽取

  1. 创建starter项⽬,把公共代码需要的所有依赖导⼊ 把公共代码复制进来

    不选场景

    引入需要的web包

    复制代码
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>

删除主程序类

在新项目中导入该starter

  1. ⾃⼰写⼀个 RobotAutoConfiguration ,给容器中导⼊这个场景需要的所有组件
    为什么这些组件默认不会扫描进去?
    starter所在的包和 引⼊它的项⽬的主程序所在的包不是⽗⼦层级

  2. 别⼈引⽤这个 starter ,直接导⼊这个 RobotAutoConfiguration ,就能把这个场景的组件导⼊进来

使用@EnableXxx机制

完全自动配置

  1. 依赖SpringBoot的SPI机制
  2. META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
    ⽂件中编写好我们⾃动配置类的全类名即可
  3. 项⽬启动,⾃动加载我们的⾃动配置类
相关推荐
Olrookie3 分钟前
若依前后端分离版学习笔记(二十)——实现滑块验证码(vue3)
java·前端·笔记·后端·学习·vue·ruoyi
请你喝好果汁64113 分钟前
Conda_bashrc 初始化机制学习笔记
笔记·学习·conda
_李小白1 小时前
【Android Gradle学习笔记】第八天:NDK的使用
android·笔记·学习
摇滚侠2 小时前
Spring Boot 3零基础教程,WEB 开发 自定义静态资源目录 笔记31
spring boot·笔记·后端·spring
摇滚侠2 小时前
Spring Boot 3零基础教程,WEB 开发 Thymeleaf 遍历 笔记40
spring boot·笔记·thymeleaf
Chloeis Syntax3 小时前
接10月12日---队列笔记
java·数据结构·笔记·队列
QT 小鲜肉3 小时前
【个人成长笔记】Qt 中 SkipEmptyParts 编译错误解决方案及版本兼容性指南
数据库·c++·笔记·qt·学习·学习方法
Cathy Bryant4 小时前
矩阵乘以向量?向量乘以向量?
笔记·神经网络·考研·机器学习·数学建模
递归不收敛5 小时前
Conda 常用命令汇总(新手入门笔记)
笔记·conda
前端橙一陈5 小时前
Salesforce Developer Edition(开发者版) 搭建测试环境
经验分享·笔记·其他