Spring Boot之自定义starter

Welcome Huihui's Code World ! !

接下来看看由辉辉所写的关于Spring Boot的相关操作吧 

目录

Welcome Huihui's Code World ! !

一. starter是什么

二.为什么要使用starter

三.怎么自定义starter【附自定义starter的案例制作】

1.创建Starter项目(spring-initializr)

2.定义Starter需要的配置类(Properties)

3.编写Starter项目的业务功能

4.编写自动配置类

5.编写spring.factories文件加载自动配置类

6.打包安装

7.其它项目引用

四.自定义starter运用到的注解


一. starter是什么

  SpringBoot中的starter是一种非常重要的机制(自动化配置),能够抛弃以前繁杂的配置,将其统一集成进starter,应用者只需要在maven中引入starter依赖,SpringBoot就能自动扫描到要加载的信息并启动相应的默认配置。starter让我们摆脱了各种依赖库的处理,需要配置各种信息的困扰

所有这些依赖模块都遵循着约定成俗的默认配置,并允许我们调整这些配置,即遵循“约定大于配置”的理念

二.为什么要使用starter

         使用starter的主要目的是简化应用程序的开发和配置过程。通常,一个应用程序需要包含许多组件和配置,如数据库连接、安全认证、日志记录等。使用starter可以将这些组件和配置预先打包为一个可重用的模块,使得开发者能够更快速地启动一个基本的应用程序   

         在我们的日常开发工作中,经常会有一些独立于业务之外的配置模块,我们经常将其放到一个特定的包下,然后如果另一个工程需要复用这块功能的时候,需要将代码硬拷贝到另一个工程,重新集成一遍,麻烦至极。如果我们将这些可独立于业务代码之外的功能配置模块封装成一个个starter,复用的时候只需要将其在pom中引用依赖即可, SpringBoot为我们完成自动装配,简直不要太爽。

三.怎么自定义starter【附自定义starter的案例制作】

1.创建Starter项目(spring-initializr)

Spring Boot之自定义starter_第1张图片

Spring Boot之自定义starter_第2张图片

Spring Boot之自定义starter_第3张图片​​​​​​​

2.定义Starter需要的配置类(Properties)

Spring Boot之自定义starter_第4张图片

package com.wh.mysmsspringbootstarter.properties;

import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * 短信服务配置类
 */

 @Data
 @ConfigurationProperties(prefix="mysms")
public class SmsProperties {

//    @Value("${mysms.keys}")
    private String keys;//访问ID、即帐号
//    @Value("${mysms.secret}")
    private String secret;//访问凭证,即密码
    
}

3.编写Starter项目的业务功能

package com.wh.mysmsspringbootstarter.service;

public interface ISmsService {

    /**
     * 发送短信
     *
     * @param phone        要发送的手机号
     * @param data         要发送的内容
     */
    void send(String phone, String data);

}
package com.wh.mysmsspringbootstarter.service;


import com.wh.mysmsspringbootstarter.properties.SmsProperties;
import org.springframework.stereotype.Service;

public class SmsServiceImpl implements ISmsService {

    private SmsProperties smsProperties; //null

    public SmsServiceImpl(SmsProperties smsProperties) {
        this.smsProperties=smsProperties;
    }

    @Override
    public void send(String phone, String data) {
        String key = smsProperties.getKeys();
        String secret = smsProperties.getSecret();
        //System.out.println("接入短信系统,Keys=" + key + ",Secret=" + secret);
        System.out.println("短信发送,phone=" + phone + "data=" + data);
    }

}

4.编写自动配置类

在此去控制service是否会被加到spring中,所以就不能够使用spring的自动装配了,而是要手动去装配,在这里是先拿到配置类,然后在下面写一个方法去控制service导入spring

Spring Boot之自定义starter_第5张图片

并且配置类也不能够交给spring自动装配了

Spring Boot之自定义starter_第6张图片

然后需要去将配置类注入到spring,这样子的话,只要配置类和service就是一个捆绑的关系了(配置类注入spring时,service也会注入到spring中)

Spring Boot之自定义starter_第7张图片

使用属性去控制是否使用功能(是否注入配置类以及service到spring中)

Spring Boot之自定义starter_第8张图片

5.编写spring.factories文件加载自动配置类

注意:其中AutoConfig是starter配置文件的类限定名,多个之间逗号分割,还可以\进行转义即相当于去掉后面换行和空格符号

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.wh.mysmsspringbootstarter.config.SmsConfig

6.打包安装

Spring Boot之自定义starter_第9张图片

我们也可以检查一下是否安装完毕Spring Boot之自定义starter_第10张图片

7.其它项目引用

①引入pom依赖

 
        
            com.wh
            mysms-spring-boot-starter
            0.0.1-SNAPSHOT
        

②yml配置

Spring Boot之自定义starter_第11张图片

如果在其他项目中引用的时候,出现了下面的这种情况(框住的是当时报红的,也意味着用不了这个启动类),那么就在启动类的pom中引入一个插件


            
                org.springframework.boot
                spring-boot-maven-plugin
                
                    exec
                
            

Spring Boot之自定义starter_第12张图片测试类

package com.wh.springboot;


import com.wh.mysmsspringbootstarter.properties.SmsProperties;
import com.wh.mysmsspringbootstarter.service.SmsServiceImpl;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest(classes = SpringbootApplication.class)
class SpringbootApplicationTests {

    @Autowired
    private SmsProperties smsProperties;


    @Test
    void contextLoads() {
        new SmsServiceImpl(smsProperties).send("17377865455","么么哒");
    }

}

Spring Boot之自定义starter_第13张图片

四.自定义starter运用到的注解

  1. @SpringBootApplication这是一个组合注解,包括了 @Configuration@EnableAutoConfiguration@ComponentScan。这个注解通常在引导类(如 Application)上使用。

  2. @EnableAutoConfiguration启用自动配置机制。这个注解可以让 Spring Boot 根据项目的依赖和配置来自动配置应用程序。

  3. @ConfigurationProperties将属性绑定到特定的 Java 类中。这个注解通常用于将应用程序的自定义配置绑定到一个 POJO 中。

  4. @ConditionalOnClass当给定的类在类路径上存在时,才实例化一个 Bean。这个注解可用于根据特定的条件来控制 Bean 的创建。

  5. @ConditionalOnMissingBean当给定的 Bean 不存在时,才实例化一个 Bean。这个注解可用于根据特定的条件来控制 Bean 的创建。

  6. @ConditionalOnProperty当指定的属性存在并且具有指定的值时,才实例化一个 Bean。这个注解可用于根据特定的属性值来控制 Bean 的创建。

  7. @Autowired自动装配一个 Bean,并将它注入到另一个 Bean 中。

  8. @Component将一个普通的 Java 类声明为 Spring Bean。

  9. @RestController将一个 Java 类声明为 Web 控制器,用于处理 HTTP 请求。

  10. @RequestMapping将一个方法映射到一个特定的 URL,并指定请求方法(如 GET、POST 等

你可能感兴趣的:(Spring,Boot,spring,boot,java,后端)