SpringBoot自定义启动器Starter流程详解

目录
  • 一、背景
  • 二、自定义启动器
    • 1、创建一个启动器的自动配置模块
    • 2、创建一个启动器模块
    • 3、在业务模块中引入启动器

一、背景

虽然Spring官方给我们提供了很多的启动器供我们使用

但有时候我们也会遇到某些特殊场景,这些启动器满足不了

这个时候就需要自定义一个启动器供我们使用

二、自定义启动器

在之前学习Spring Boot的过程中,我们已经对启动器有了一个大致的了解

Spring Boot实现某个功能,一般是引入对应场景的启动器(一般不写代码,只是声明这个启动器需要引用哪些依赖),然后这个启动器又有对应的自动配置包

1、创建一个启动器的自动配置模块

先写和配置文件中配置项互相绑定的实体类

package com.decade.autoConfigure.pojo;
import org.springframework.boot.context.properties.ConfigurationProperties;
// 将这个类的属性和系统配置文件中的属性进行绑定
@ConfigurationProperties(prefix = "team")
public class TeamInfo {
    private String winnerName;
    private String loserName;
    public String getWinnerName() {
        return winnerName;
    }
    public void setWinnerName(String winnerName) {
        this.winnerName = winnerName;
    }
    public String getLoserName() {
        return loserName;
    }
    public void setLoserName(String loserName) {
        this.loserName = loserName;
    }
}

再写自己要实现的业务逻辑

package com.decade.autoConfigure.service;
import com.decade.autofigure.pojo.TeamInfo;
import org.springframework.beans.factory.annotation.Autowired;
public class TestService {
	// 引入和yaml文件中配置项绑定的类
    @Autowired
    private TeamInfo teamInfo;
    public String testMethod() {
        return teamInfo.getWinnerName() + "今天早上,绝杀了" + teamInfo.getLoserName();
    }
}

接着,写一个自动配置类,向容器中放入组件

package com.decade.autoConfigure.auto;
import com.decade.autofigure.pojo.TeamInfo;
import com.decade.autofigure.service.TestService;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
// 使得TeamInfo中的@ConfigurationProperties注解生效,将TeamInfo注册到容器中
@EnableConfigurationProperties(TeamInfo.class)
@Configuration
public class AutoConfiguration {
    @Bean
    // 只有容器中不存在TestService这个类型的bean时,才回去初始化这个bean
    @ConditionalOnMissingBean(TestService.class)
    public TestService testService() {
        TestService testService = new TestService();
        return testService;
    }
}

最后,在新版本的Spring Boot中为了确保框架启动时加载该配置类

我们需要在这个模块的resource文件下

新建/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件

然后在里面写自己之前创建的自动配置类

注意:老版可能是放在META-INF/spring.factories文件中

com.decade.autoConfigure.auto.AutoConfiguration

2、创建一个启动器模块

不用写任何业务代码,只需要在pom文件中,引用之前的创建的自动配置模块

3、在业务模块中引入启动器

如图,引入我们自己定义的启动器

然后在yaml文件中设置好绑定的配置项

再写一个测试方法进行测试即可

package com.decade;
import com.decade.autoConfigure.service.TestService;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
@Slf4j
class SpringbootWebApplicationTests {
    @Autowired
    private TestService testService;
    @Test
    public void testCustomStarter() {
        System.out.println(testService.testMethod());
    }
}

测试方法结果如下图

到此这篇关于SpringBoot自定义启动器Starter流程详解的文章就介绍到这了,更多相关SpringBoot自定义Starter内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringBoot居然有44种应用启动器,你都知道吗

    啥是应用启动器?SpringBoot集成了spring的很多模块,比如tomcat.redis等等.你用SpringBoot搭建项目,只需要在pom.xml引入相关的依赖,和在配置文件中简单的配置就可以使用相应模块了. 非常方便,spring boot集成了哪些启动器呢? SpringBoot应用启动器基本的一共有44种,具体如下: 1)spring-boot-starter 这是Spring Boot的核心启动器,包含了自动配置.日志和YAML. 2)spring-boot-starter-a

  • 手动构建springBoot启动器过程图解

    我们都知道可以使用SpringBoot快速的开发基于Spring框架的项目.由于围绕SpringBoot存在很多开箱即用的Starter依赖,使得我们在开发业务代码时能够非常方便的.不需要过多关注框架的配置,而只需要关注业务即可. 其实springboot的一个启动器基本上就包含两个项目,一个是spring-boot-starter,另一个是spring-boot-autoConfigure 举个Json启动器的例子,这里面包含了josn的starter和autoConfiger,因为autoC

  • springboot 场景启动器使用解析

    这篇文章主要介绍了springboot 场景启动器使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 为什么springboot不需要我们去配置那么繁琐的东西? 我们直接看pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmln

  • springboot 自定义启动器的实现

    目录 创建自定义启动器 0.项目总览 1.创建项目,引入依赖 2.创建属性配置类 3.创建自动配置类 4.创建自动配置属性文件 使用自定义启动器 1.springboot_01 项目引入自定义启动器 2.配置连接池信息 3.注入属性测试 小结 创建自定义启动器 0.项目总览 1.创建项目,引入依赖 创建项目 spring-boot-jdbc-starter,引入依赖,pom文件如下: <?xml version="1.0" encoding="UTF-8"?&

  • SpringBoot自定义starter启动器的实现思路

    目录 一.引言 二. 需求说明 三. 设计思路 四. 实现步骤 1. Step1 业务定义 2. Step2 自动配置 2.1 HelloService类 2.2 HelloProperties类 2.3 HelloServiceAutoConfiguration类 3. Step3 工厂文件 4. Step4 安装 5. Step5 引入使用 5.1 在应用中添加自定义starter依赖坐标 5.2 编写配置信息 5.3 编写测试的Controller 5.4 打开浏览器输入Controlle

  • SpringBoot自定义启动器Starter流程详解

    目录 一.背景 二.自定义启动器 1.创建一个启动器的自动配置模块 2.创建一个启动器模块 3.在业务模块中引入启动器 一.背景 虽然Spring官方给我们提供了很多的启动器供我们使用 但有时候我们也会遇到某些特殊场景,这些启动器满足不了 这个时候就需要自定义一个启动器供我们使用 二.自定义启动器 在之前学习Spring Boot的过程中,我们已经对启动器有了一个大致的了解 Spring Boot实现某个功能,一般是引入对应场景的启动器(一般不写代码,只是声明这个启动器需要引用哪些依赖),然后这

  • Springboot实现动态定时任务流程详解

    目录 一.静态 二.动态 1.基本代码 2.方案详解 2.1 初始化 2.2 单次执行 2.3 停止任务 2.4 启用任务 三.小结 一.静态 静态的定时任务可以直接使用注解@Scheduled,并在启动类上配置@EnableScheduling即可 @PostMapping("/list/test1") @Async @Scheduled(cron = "0 * * * * ?") public void test1() throws Exception { Ob

  • SpringBoot响应处理实现流程详解

    目录 1.相关依赖 2.ReturnValueHandlers—返回值处理器 3.HttpMessageConvert—消息转换器 4.开启浏览器参数方式内容协商功能 1.相关依赖 web项目引入的启动器spring-boot-starter-web中含有 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-json</arti

  • SpringBoot解析yml全流程详解

    目录 背景 加载监听器 执行run方法 加载配置文件 封装Node 调用构造器 思考 背景 前几天的时候,项目里有一个需求,需要一个开关控制代码中是否执行一段逻辑,于是理所当然的在yml文件中配置了一个属性作为开关,再配合nacos就可以随时改变这个值达到我们的目的,yml文件中是这样写的: switch: turnOn: on 程序中的代码也很简单,大致的逻辑就是下面这样,如果取到的开关字段是on的话,那么就执行if判断中的代码,否则就不执行: @Value("${switch.turnOn}

  • SpringBoot自定义错误处理逻辑详解

    目录 1. 自定义错误页面 2. @ControllerAdvice+@ExceptionHandler 3. 使用@ResponseStatus处理自定义异常 4. 框架底层异常 5. 自定义异常解析器 6. ErrorViewResolver实现自定义处理异常 1. 自定义错误页面 将自定义错误页面放在 templates 的 error 文件夹下,SpringBoot 精确匹配错误信息,使用 4xx.html 或者 5xx.html 页面可以打印错误信息 4xx —— 打印 status

  • SpringBoot如何实现starter原理详解

    1.Mybatis 自定义配置的分析 在我们自定义starter之前我们写了解一下Mybatis 是如何实现starter 在SpringBoot 引入的依赖如下: <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.2</version&

  • Spring security自定义用户认证流程详解

    1.自定义登录页面 (1)首先在static目录下面创建login.html 注意:springboot项目默认可以访问resources/resources,resources/staic,resources/public目录下面的静态文件 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登录页面</titl

  • SpringBoot自定义Starter实现流程详解

    目录 starter起步依赖 starter命名规则 自定义starter new module 添加依赖 simplebean 自动配置类 META-INF\spring.factories 在spring-boot-mytest中引入mystarter-spring-boot-starter 添加配置 通过@Autowired引用 启动访问 starter起步依赖 starter起步依赖是springboot一种非常重要的机制, 它打包了某些场景下需要用到依赖,将其统一集成到starter,

  • SpringBoot自定义路由覆盖实现流程详解

    目录 背景 设计 实现 注解定义 注解扫描及管理 自定义RequestMappingHandlerMapping 注册RequestMappingHandlerMapping 使用示例 背景 公司最近有一个项目二期需要对一些功能进行改造,涉及部分框架内置业务接口个性化定制,兼容老接口功能并且增加一部分新的数据返回,由于前端调用这些接口分布较多且较为零碎,修改测试成本较大,所以打算在框架层面提供路由覆盖功能,加快项目进度减少无技术含量的修改带来的系统风险 设计 提供自定义注解指定需要覆盖的路由及新

  • springboot整合mybatis流程详解

    目录 1.mybatis是什么 2.整合 2.1 导入依赖 2.2 创建包和类 2.3 在application.yaml配置mybatis 3.使用注解版mybaits 4.实战过程 1.mybatis是什么 MyBatis 是一款优秀的持久层框架,它支持自定义 SQL.存储过程以及高级映射.MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作.MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型.接口和 Java POJO(Plain Old Java

随机推荐