钟君扬的SpringBoot小课堂:如何自定义starter

钟君扬的SpringBoot小课堂:如何自定义starter

原则:一搭环境、二写demo、三测试。

记忆口诀:美橡筋、春诗人、要登记

我们将starter模块比作项目经理,他只管启动项目。将configure模块比作人事经理,他需要安排具体的人员和项目小组来完成项目。

我们可以如下记忆整个过程:

一位美丽的橡筋姑娘,要和一位春天的诗人登记结婚。

橡筋为(项目经理的谐音记法),美是Maven项目的谐音记法。美橡筋合起来表示:我们需要用maven来创建一个starter模块来作为我们的项目经理。

春诗人则是springboot、人事经理两者相结合的谐音记法。表示我们需要创建一个springboot模块来作为我们的人事经理。

要登记,则最好理解。表示将我们编写好的自动配置类,写入META-INF\spring.factories这个文件中。我们可以把这个spring.factorie文件看作是一个公司的总人事部,他管理着所有的小人事部。我们编写的自动配置类就相当于是一个个的小人事部。任何新人都需要向总人事部门报备。而这些大大小小的人事部门的根本目的,都是为我们的项目提供实际干活儿的人员,也就是各种bean。

说明

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

命名归约:

官方命名:

  • 前缀:spring-boot-starter-xxx
  • 比如:spring-boot-starter-web…

SpringBoot提供的starter以spring-boot-starter-xxx的方式命名的。

官方建议自定义的starter使用xxx-spring-boot-starter命名规则,以区分SpringBoot生态提供的starter。

一、编写启动器

1、在IDEA中新建一个空项目 zhong-demo-spring-boot-starter。

  • 友情提示:该处的项目名称并不会影响我们最后安装到maven仓库中的模块的名字。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dOqk4QEK-1642832753766)(钟君扬说SpringBoot06:自定义starter.assets/2022-01-16_132048-16423184691661-16423345310021.png)]

2、新建一个普通Maven模块:zhong-spring-boot-starter

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VAem06eg-1642832753767)(钟君扬说SpringBoot06:自定义starter.assets/2022-01-16_132249.png)]

3、再新建一个Springboot模块:zhong-spring-boot-starter-autoconfigure

  • 友情提示,该项目可以不勾选任何依赖依赖,直接一直点击下一步就行了。

4、点击apply即可

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aPDIVggV-1642832753768)(钟君扬说SpringBoot06:自定义starter.assets/2022-01-16_132426-16423185678175.png)]

5、在我们的 starter 中 导入 autoconfigure 的依赖!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C4X5rqb1-1642832753768)(钟君扬说SpringBoot06:自定义starter.assets/2022-01-16_134107.png)]

<!-- 启动器 -->
<dependencies>
    <!--  引入自动配置模块 -->
    <dependency>
        <groupId>com.zhong</groupId>
        <artifactId>zhong-spring-boot-starter-autoconfigure</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
</dependencies>

6、将 autoconfigure 项目下多余的文件都删掉

Pom中只留下一个 starter,将不需要的test文件夹、application应用程序等都删掉。这是所有的启动器基本配置!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9jLouxuP-1642832753768)(钟君扬说SpringBoot06:自定义starter.assets/2022-01-16_135304.png)]

7、依次创建所需的package

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CToq6lFv-1642832753769)(钟君扬说SpringBoot06:自定义starter.assets/2022-01-16_134117.png)]

8、我们编写一个自己的服务类

package com.zhong.service;

import com.zhong.properties.HelloProperties;

public class HelloService {

    HelloProperties helloProperties;

    public HelloProperties getHelloProperties() {
        return helloProperties;
    }

    public void setHelloProperties(HelloProperties helloProperties) {
        this.helloProperties = helloProperties;
    }

    public String sayHello(String extent){
        return helloProperties.getname() + extent + helloProperties.gethobbies();
    }

}

9、编写配置类

package com.zhong.properties;

import org.springframework.boot.context.properties.ConfigurationProperties;


// 前缀 zhong.hello
@ConfigurationProperties(prefix = "zhong.hello")
public class HelloProperties {

    private String name;
    private String hobbies;

    public String getname() {
        return name;
    }

    public void setname(String name) {
        this.name = name;
    }

    public String gethobbies() {
        return hobbies;
    }

    public void sethobbies(String hobbies) {
        this.hobbies = hobbies;
    }
}

10、编写我们的自动配置类并注入bean

package com.zhong.config;


import com.zhong.properties.HelloProperties;
import com.zhong.service.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
//web应用生效
@ConditionalOnWebApplication
@EnableConfigurationProperties(HelloProperties.class)
public class HelloServiceAutoConfiguration {

    @Autowired
    HelloProperties helloProperties;

    @Bean
    public HelloService helloService(){
        HelloService service = new HelloService();
        service.setHelloProperties(helloProperties);
        return service;
    }

}

11、最重要的一步!!!

  • 在autoconfigure下的resources编写一个自己的 META-INF\spring.factories,将我们编写的自动配置类写入其中。
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.zhong.config.HelloServiceAutoConfiguration

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s3aagWgq-1642832753769)(钟君扬说SpringBoot06:自定义starter.assets/2022-01-16_135808.png)]

  • 此处一定要加上package的名字,否则会报错。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-doSVDqMZ-1642832753769)(钟君扬说SpringBoot06:自定义starter.assets/2022-01-16_174941.png)]

出现图中的红色提示,可以暂时不用管。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-slfIVrLi-1642832753770)(钟君扬说SpringBoot06:自定义starter.assets/2022-01-16_140413.png)]

12、编写完成后,安装到maven仓库中

一定记住,先安装configure,后安装starter。否则可能会出现错误!

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mKSEjGk6-1642832753770)(钟君扬说SpringBoot06:自定义starter.assets/2022-01-16_140540.png)]

二、新建项目测试我们自己写的启动器

1、新建一个SpringBoot 项目test-zhong-spring-boot-starter

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q3s2PJIH-1642832753770)(钟君扬说SpringBoot06:自定义starter.assets/2022-01-16_140741.png)]

  • 记得勾选我们的SpringWeb

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xkxrZEHw-1642832753771)(钟君扬说SpringBoot06:自定义starter.assets/2022-01-16_140751-16423262514712.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3RTpF2U2-1642832753771)(钟君扬说SpringBoot06:自定义starter.assets/2022-01-16_140843.png)]

<dependency>
    <groupId>com.zhong</groupId>
    <artifactId>zhong-spring-boot-starter</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

3、编写一个 HelloController 进行测试我们自己的写的接口!

package com.zhong.controller;

@RestController
public class HelloController {

    @Autowired
    HelloService helloService;

    @RequestMapping("/hello")
    public String hello(){
        return helloService.sayHello("非常非常非常");
    }

}

4、编写配置文件 application.yaml

  • 大家注意,如果是采用properties格式的文件,则有中文可能在浏览器上出现乱码。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rdOfc3k8-1642832753771)(钟君扬说SpringBoot06:自定义starter.assets/image-20220122141046954.png)]

zhong:
  hello:
    hobbies: "亲爱的小伙伴们"
    name: "君扬"

5、启动项目进行测试,结果成功 !

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yITiJ59D-1642832753772)(钟君扬说SpringBoot06:自定义starter.assets/2022-01-17_091520.png)]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值