SpringBoot中的自定义Starter解读

 更新时间:2023年12月27日 11:05:04   作者:学哥斌  
这篇文章主要介绍了SpringBoot中的自定义Starter解读,启动器模块其实是一个空的jar文件,里面没有什么类、接口,仅仅是提供辅助性依赖管理,这些依赖可能用于自动装配或者其他类库,需要的朋友可以参考下

1、说明

启动器模块其实是一个空的jar文件,里面没有什么类、接口,仅仅是提供辅助性依赖管理,这些依赖可能用于自动装配或者其他类库;

在这里插入图片描述

官方的命名方式是: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空项目:

在这里插入图片描述

在这里插入图片描述

1、新建一个普通maven模块:

在这里插入图片描述

在这里插入图片描述

2、新建一个SpringBoot模块:

在这里插入图片描述

构建好了后,结构如下:

在这里插入图片描述

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

在这里插入图片描述

2.3 清理autoconfigure模块

新建的空SpringBoot模块删除其他无关的文件和文件夹,同时pom.xml只留下sarter:

在这里插入图片描述

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模块,编辑好之后工程如下:

在这里插入图片描述

执行maven的install命令(注意先安装autoconfigure再安装starter,否则会找不到包)。

3、测试

新建一个SpringBoot工程,并导入我们自己写的启动器:

在这里插入图片描述

编写一个控制器:

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中的自定义Starter解读的文章就介绍到这了,更多相关自定义Starter内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java文件操作练习代码 读取某个盘符下的文件

    java文件操作练习代码 读取某个盘符下的文件

    这篇文章主要介绍了java读取某个盘符下的文件示例,代码中要求的是绝对路径,编译过程中要注意绝对路径问题和异常的抓取
    2014-01-01
  • 一小时迅速入门Mybatis之Prepared Statement与符号的使用

    一小时迅速入门Mybatis之Prepared Statement与符号的使用

    这篇文章主要介绍了一小时迅速入门Mybatis之Prepared Statement与符号的使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • SpringBoot接入ftp/ftps并上传文件和配置的代码指南

    SpringBoot接入ftp/ftps并上传文件和配置的代码指南

    接入ftp服务器,在springboot上实现起来也不算复杂,本文主要讲下如何在springboot下接入ftp服务上传文件,并对出现的问题做一些记录,ftp服务的参数配置等,需要的朋友可以参考下
    2024-12-12
  • Spring多种加载Bean方式解析

    Spring多种加载Bean方式解析

    本篇文章主要介绍了Spring多种加载Bean方式解析,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • Java 并发和线程处理示例详解

    Java 并发和线程处理示例详解

    这篇文章主要介绍了Java 并发和线程处理示例详解,通过本文的介绍,我们详细了解了 Java 并发和线程处理的基本概念、创建线程的方法、确保线程安全性以及避免死锁的技巧,需要的朋友可以参考下
    2026-02-02
  • Java 中ThreadLocal类详解

    Java 中ThreadLocal类详解

    什么是ThreadLocal?顾名思义它是local variable(线程局部变量)。它的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,是每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突。从线程的角度看,就好像每一个线程都完全拥有该变量。
    2016-03-03
  • Java修改图片大小尺寸的简单实现

    Java修改图片大小尺寸的简单实现

    这篇文章主要介绍了Java修改图片大小尺寸的简单实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • 剑指Offer之Java算法习题精讲数组与字符串

    剑指Offer之Java算法习题精讲数组与字符串

    跟着思路走,之后从简单题入手,反复去看,做过之后可能会忘记,之后再做一次,记不住就反复做,反复寻求思路和规律,慢慢积累就会发现质的变化
    2022-03-03
  • IDEA中Maven Projects窗口实现显示

    IDEA中Maven Projects窗口实现显示

    文章介绍了如何在IDEA中打开Maven项目视图,包括点击最左下角的Maven小框、通过菜单栏View->ToolWindows->Maven Projects打开,以及使用快捷键Help->Find Action(Ctrl+Shift+A)并输入Maven Projects来实现
    2026-02-02
  • java集合继承关系图分享

    java集合继承关系图分享

    这篇文章主要为大家详细介绍了java集合继承关系图,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11

最新评论