[SpringBoot-06]自定义Starter

文章目录

  • 1、说明
  • 2、自定义starter
    • 2.1 工程构建
    • 2.2 starter模块导入autoconfigure模块的依赖
    • 2.3 清理autoconfigure模块
    • 2.4 编辑autoconfigure模块
      • 2.4.1 编写服务
      • 2.4.2 编写配置类
      • 2.4.3 编写自动配置并注入bean
      • 2.4.4 编写自己的spring.factories
    • 2.5 统一打包安装
  • 3、测试

1、说明

  启动器模块其实是一个空的jar文件,里面没有什么类、接口,仅仅是提供辅助性依赖管理,这些依赖可能用于自动装配或者其他类库;
[SpringBoot-06]自定义Starter_第1张图片
  官方的命名方式是:spring-boot-starter-xxx,例如:spring-boot-starter-web。
  官方提倡的自定义starter命名方式要和他们区分开,官方的xxx是在最后面,提议第三方自定义的starter的xxx放在最前面,即:xxx-spring-boot-starter,例如:mybatis-spring-boot-starter。

2、自定义starter

2.1 工程构建

  IDEA新建普通java空项目:
[SpringBoot-06]自定义Starter_第2张图片
[SpringBoot-06]自定义Starter_第3张图片
  1、新建一个普通maven模块:
[SpringBoot-06]自定义Starter_第4张图片
[SpringBoot-06]自定义Starter_第5张图片
  2、新建一个SpringBoot模块:
[SpringBoot-06]自定义Starter_第6张图片
  构建好了后,结构如下:
[SpringBoot-06]自定义Starter_第7张图片

2.2 starter模块导入autoconfigure模块的依赖

[SpringBoot-06]自定义Starter_第8张图片

2.3 清理autoconfigure模块

  新建的空SpringBoot模块删除其他无关的文件和文件夹,同时pom.xml只留下sarter:
[SpringBoot-06]自定义Starter_第9张图片

2.4 编辑autoconfigure模块

  autoconfigure模块总共要写三个文件:service、properties和antoconfiguration。这三个分别的作用是:提供服务、配置类(定义服务相关的属性配置)和自动配置功能。

2.4.1 编写服务

package cn.klb.boot.autoconfigure;

/**
 * @Author: Konglibin
 * @Description:
 * @Date: Create in 2020/4/24 11:21
 * @Modified By:
 */
public class CalculatorService {

    CalculatorProperties properties;

    public CalculatorProperties getProperties() {
        return properties;
    }

    public void setProperties(CalculatorProperties properties) {
        this.properties = properties;
    }

    public String getAreaOfCircle(Double radius) {
        Double area = properties.getPi() * radius * radius;
        return Double.toString(area);
    }
}

2.4.2 编写配置类

package cn.klb.boot.autoconfigure;

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

/**
 * @Author: Konglibin
 * @Description:
 * @Date: Create in 2020/4/24 11:21
 * @Modified By:
 */
@ConfigurationProperties(prefix = "calculator.constant")
public class CalculatorProperties {
    private Double pi;
    private Double e;

    public Double getPi() {
        return pi;
    }

    public void setPi(Double pi) {
        this.pi = pi;
    }

    public Double getE() {
        return e;
    }

    public void setE(Double e) {
        this.e = e;
    }
}

2.4.3 编写自动配置并注入bean

package cn.klb.boot.autoconfigure;

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;

/**
 * @Author: Konglibin
 * @Description:
 * @Date: Create in 2020/4/24 11:22
 * @Modified By:
 */

@Configuration
@ConditionalOnWebApplication
@EnableConfigurationProperties(CalculatorProperties.class)
public class CalculatorServiceAutoConfiguration {

    @Autowired
    CalculatorProperties properties;

    @Bean
    public CalculatorService getCalculatorService(){
        CalculatorService service = new CalculatorService();
        service.setProperties(properties);
        return service;
    }
}

2.4.4 编写自己的spring.factories

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
cn.klb.boot.autoconfigure.CalculatorServiceAutoConfiguration

2.5 统一打包安装

  大部分工作都是在编辑autoconfigure模块,编辑好之后工程如下:
[SpringBoot-06]自定义Starter_第10张图片
  执行maven的install命令(注意先安装autoconfigure再安装starter,否则会找不到包)。

3、测试

  新建一个SpringBoot工程,并导入我们自己写的启动器:
[SpringBoot-06]自定义Starter_第11张图片
  编写一个控制器:

package cn.klb.springboot_helloworld.controller;


import cn.klb.boot.autoconfigure.CalculatorService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author: Konglibin
 * @Description:
 * @Date: Create in 2020/4/24 11:44
 * @Modified By:
 */
@RestController
public class CalculatorController {

    @Autowired
    CalculatorService service;

    @RequestMapping("/cal")
    public String calculateArea(){
        return service.getAreaOfCircle(2.0);
    }
}

  application.yaml配置文件配置属性:

calculator:
  constant:
    pi: 3.14
    e: 2.0

  启动后浏览器输入自己定义的地址,得到结果如下:
[SpringBoot-06]自定义Starter_第12张图片
  结果成功!

你可能感兴趣的:(Spring)