当前位置: 首页 > article >正文

SpringBoot:手写一个 SpringBoot Starter

  • 声明:原文作者:yuan_404

文章目录

  • 1. 说明
  • 2 . 编写启动器
  • 3 . 新建项目测试自己写的启动器

1. 说明

  • 启动器模块是一个 空 jar 文件,仅提供辅助性依赖管理,这些依赖可能用于自动装配或者其他类库

命名归约:

  • 官方命名:

    • 前缀:spring-boot-starter-xxx
    • 比如:spring-boot-starter-web…
  • 自定义命名:

    • xxx-spring-boot-starter
    • 比如:mybatis-spring-boot-starter

2 . 编写启动器

  1. 在IDEA中新建一个空项目 spring-boot-starter-diy

  2. 新建一个普通Maven模块:demo-spring-boot-starter

  3. 新建一个Springboot模块:demo-spring-boot-starter-autoconfigure

  4. 点击apply即可,基本结构

  5. 在starter 中 导入 autoconfigure 的依赖

    <!-- 启动器 -->
    <dependencies>
        <!--  引入自动配置模块 -->
        <dependency>
            <groupId>com.demo</groupId>
            <artifactId>demo-spring-boot-starter-autoconfigure</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
    
    
  6. 将 autoconfigure 项目下,Pom中加入依赖

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

    说明:
    第一个依赖 主要是为编译器配置的 可以根据properties 鼠标右键 点到用这个属性的类上个

    第二个依赖 主要是为了自动装配

  7. 编写HelloProperties 配置类

    // 前缀 demo.hello
    @ConfigurationProperties(prefix = "demo.hello")
    public class HelloProperties {
    
        private String prefix;
        private String suffix;
    
        public String getPrefix() {
            return prefix;
        }
    
        public void setPrefix(String prefix) {
            this.prefix = prefix;
        }
    
        public String getSuffix() {
            return suffix;
        }
    
        public void setSuffix(String suffix) {
            this.suffix = suffix;
        }
    }
    
    

    这里我们要读取的配置就是demo.hello.prefix 和 demo.hello.suffix 的值

    @ConfigurationProperties注解的作用就是读取配置文件指定属性的值

  8. 编写一个自己的服务

    public class HelloService {
        HelloProperties helloProperties;
    
        public HelloProperties getHelloProperties() {
            return helloProperties;
        }
    
        public void setHelloProperties(HelloProperties helloProperties) {
            this.helloProperties = helloProperties;
        }
    
        public String sayHello(String name){
            return helloProperties.getPrefix() + name + helloProperties.getSuffix();
        }
    }
    
    
    
  9. 编写自动配置类并注入bean,测试

    @Configuration
    @ConditionalOnWebApplication //web应用生效
    @EnableConfigurationProperties(HelloProperties.class)
    public class HelloServiceAutoConfiguration {
        @Autowired
        HelloProperties helloProperties;
    
        @Bean
        public HelloService helloService(){
            HelloService service = new HelloService();
            service.setHelloProperties(helloProperties);
            return service;
        }
    }
    
    
    

    说明:

    • @Configuration
      标识本类是配置类(相当于spring中application.xml)

    • @EnableConfigurationProperties(HelloProperties.class)
      如果 HelloProperties 中有注解@ConfigurationProperties 那么这个类就
      会被加到spring上下文的容器中,也就是可以通过@Autowire来注入

    • @ConditionalOnClass
      当类路径下有指定类的情况下 才进行下一步

    • @ConditionalOnMissingBean
      当spring容器中没有这个Bean的时候才进行下一步

  10. 在resources编写一个自己的 META-INF\spring.factories

```java
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.demo.config.HelloServiceAutoConfiguration

```
  1. 编写完成后,可以安装到maven仓库中

  2. 项目包结构

3 . 新建项目测试自己写的启动器

  1. 新建一个SpringBoot 项目(需要引入 web 的启动器)

  2. 导入我们自己写的启动器

    <dependency>
    	<groupId>com.demo</groupId>
    	<artifactId>demo-spring-boot-starter</artifactId>
    	<version>1.0-SNAPSHOT</version>
    </dependency>
    
    
  3. 编写一个 HelloController 进行测试我们自己的写的接口

    @RestController
    public class HelloController {
    
        @Autowired
        HelloService helloService;
    
        @RequestMapping("/hello")
        public String hello(){
            return helloService.sayHello("zxc");
        }
    
    }
    
    
  4. 编写配置文件 application.properties

    demo.hello.prefix="Mystarter-perfix--"
    demo.hello.suffix="--Mystarter-suffix"
    
    
  5. 启动项目进行测试,结果成功


http://www.kler.cn/a/650.html

相关文章:

  • 【ES6复习笔记】箭头函数(5)
  • cannot import name ‘_C‘ from ‘pytorch3d‘
  • 【人工智能】使用Python构建推荐系统:从协同过滤到深度学习
  • 活着就好20241226
  • Echarts连接数据库,实时绘制图表详解
  • 详细介绍如何使用rapidjson读取json文件
  • 【LeetCode】1544. 整理字符串、LCP 44. 开幕式焰火
  • 2022年全国职业院校技能大赛(中职组)网络安全竞赛试题——渗透测试解析(详细)
  • 深度学习 Day26——使用Pytorch实现猴痘病识别
  • 计算机器的工作时长
  • MongoDB数据库从入门到精通系列之三:创建、更新和删除文档
  • Golang每日一练(leetDay0006)
  • shell-流程控制-3
  • Java实现调用第三方相关接口(附详细思路)
  • 【spring】spring如何解决bean的循环依赖
  • Java的二叉树、红黑树、B+树
  • 项目实战典型案例26——nacos的命名空间名称和id不一致带来的思考
  • C语言/动态通讯录
  • 10个最频繁用于解释机器学习模型的 Python 库
  • 全国自学考试03708《中国近现代史纲要》重点复习精要
  • 微信小程序搭建流程
  • Python+Yolov8目标识别特征检测
  • HTTP 缓存的工作原理
  • springboot健身房管理系统
  • 【云原生·Docker】常用命令
  • 「ML 实践篇」分类系统:图片数字识别