SpringBoot定制化Starter实现方法

目录
  • 什么是Spring Boot Starter
  • 实现步骤
    • 启动器
    • 自动配置包
  • 总结自定义Starter的实现逻辑

Spring Boot Starter官网描述:Spring Boot Starter官方介绍

什么是Spring Boot Starter

Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,可以一站式集成 Spring和其他技术,而不需要到处找示例代码和依赖包。Spring Boot Starter的工作原理是:Spring Boot在启动时扫描项目所依赖的JAR包,寻找包含spring.factories文件的JAR包,根据spring.factories配置加载AutoConfigure类,根据@Conditional注解的条件,进行自动配置并将Bean注入Spring Context

为什么要自定义Spring Boot Starter?

在Spring Boot官网为了简化我们的开发,已经提供了非常多场景的Starter来为我们使用,即便如此,也无法全面的满足我们实际工作中的开发场景,这时我们就需要自定义实现定制化的Starter。

实现步骤

1.首先,创建一个Maven空工程,添加两个模块

启动器

启动器中没有任何的源代码,只是告诉我们当前场景需要引入哪些依赖即可!

创建启动器模块为maven工程,命名为

xiaozhao-hello-spring-boot-starter,对应的依赖文件

<groupId>com.zhao</groupId>
<artifactId>xiaozhao-hello-spring-boot-starter</artifactId>
<version>1.0-SNAPSHOT</version>

自动配置包

自动配置包中实现了所有的自动配置功能!

创建自动配置包模块为SpringBoot初始化工程,命名为xiaozhao-hello-spring-boot-starter-autoconfigure

最终的项目模块如下:

2.模块创建完成后,需要在启动器中引入自动配置模块(别人引入场景启动器,自动配置包就会自动引入)

<dependencies>
    <dependency>
        <groupId>com.zhao</groupId>
        <artifactId>xiaozhao-hello-spring-boot-starter-autoconfigure</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
</dependencies>

3.编写自动配置模块。

创建自定义的Properties文件

@ConfigurationProperties("xiaozhao.hello")
public class HelloProperties {
    private String prefix;
    private String suffix;
    public String getPrefix() {
        return prefix;
    }
    public void setPrefix(String prefix) {
        this.prefix = prefix;
    }
    public String getSuffix() {
        return suffix;
    }
    public void setSuffix(String suffix) {
        this.suffix = suffix;
    }
}

创建业务类读取Properties文件中的值

public class HelloService {
    @Autowired
    HelloProperties helloProperties;
     public String sayHello(String userName){
        return helloProperties.getPrefix() + ":" + userName + ">" + helloProperties.getSuffix();
     }
}

再个自动配置类,自动进行类加载

@Configuration
@ConditionalOnMissingBean(HelloService.class)
@EnableConfigurationProperties(HelloProperties.class)
public class HelloServiceAutoConfiguration {
    @Bean
    public HelloService helloService(){
        HelloService helloService = new HelloService();
        return helloService;
    }
}

最终的效果如下:

4.在resources目录下创建META-INF/spring.factories添加如下配置信息

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.zhao.hello.auto.HelloServiceAutoConfiguration

5.装hello-spring-boot-starter-autoconfigure模块和xiaozhao-hello-spring-boot-starter

6.装完成后,创建新的项目来引入创建好的starter.新的的项目名为hello-test的Spring Boot初始化项目。

引入我们之前定义的Starter启动器和Spring Boot自带的Web启动器

<dependencies>
   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
   </dependency>
   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
   </dependency>
   <dependency>
      <groupId>com.zhao</groupId>
      <artifactId>xiaozhao-hello-spring-boot-starter</artifactId>
      <version>1.0-SNAPSHOT</version>
   </dependency>
</dependencies>

7.在hello-test项目中创建测试Controller

@RestController
public class HelloController {
    @Autowired
    HelloService helloService;
    @GetMapping("/hello")
    public String sayHello() {
        String str = helloService.sayHello("李四");
        return str;
    }
}

编写配置文件

xiaozhao.hello.prefix=hello
xiaozhao.hello.suffix=666

8.启动项目,测试一下

总结自定义Starter的实现逻辑

  • 首先引入自定义的Starter:xiaozhao-hello-spring-boot-starter,在这个Starter中引入自定义的自动配置场景
  • 当自动配置场景启动时,会去寻找spring.factories文件,去自动加载HelloServiceAutoConfiguration类文件
  • 加载完自动配置类后,@ConditionalOnMissingBean(HelloService.class)通过这个注解,当容器中没有HelloService时,去自动添加一个HelloService组件。
  • HelloService组件的所有属性,通过HelloProperties配置文件进行绑定的,@ConfigurationProperties("xiaozhao.hello"),通过xiaozhao.hello。xxx进行绑定。
  • 如果自己在容器中注入一个HelloService组件,使用的就不是自动配置的,而是重新注入的。

到此这篇关于SpringBoot定制化Starter实现方法的文章就介绍到这了,更多相关SpringBoot Starter内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringBoot Starter依赖原理与实例详解

    目录 1 Starter 2 了解 spring.factories机制 2.1 不同包路径下的依赖注入 2.2 spring.factories 机制 3 spring.factories 机制的实现源码分析 4 程序运行入口run() 1 Starter 在开发 SpringBoot 项目的时候,我们常常通过 Maven 导入自动各种依赖,其中很多依赖都是以 xxx-starter 命名的. 像这种 starter 依赖是怎么工作的呢? 2 了解 spring.factories机制 导入一

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

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

  • 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实现流程详解

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

  • SpringBoot详细分析自动装配原理并实现starter

    目录 约定优于配置 自动装配 手写一个starter组件 约定优于配置 SpringBoot的预定优于配置主要体现在以下几个方面: maven的目录结构: 配置文件默认存放在resources目录下 项目编译后的文件存放在target目录下 项目默认打包成jar格式 配置文件默认为application.yml或application.yaml或application.properties 默认通过 spring.profiles.active 属性来决定运行环境时的配置文件. 自动装配 相对于

  • 详解SpringBoot如何自定义一个Starter

    目录 需求 starter创建 自定义配置信息类 发送消息的实现 自动配置类 spring.factories 项目结构 如何使用该starter 需求 在一个项目中,用户需要发送消息,可以通过邮件,QQ,微信,钉钉,飞书等,目前这些发送消息的方式都已经提供了公开的API,想要实现在项目中通过简单的配置各个发发送方的发送方信息,然后直接调用发送的API,发送信息即可,下面举个例子: 配置 message: email: username: Aden password: 123456 key: H

  • SpringBoot Starter机制及整合tomcat的实现详解

    目录 Starter机制和springboot整合tomcat Starter机制 springboot整合tomcat 总结 Starter机制和springboot整合tomcat Starter机制 先解释一下什么是Starter机制.Starter机制就是maven工程中pom文件引入了某个Starter依赖,就能使用对应的功能 例如 引入web的starter依赖 ,就可以使用有关于web方面的功能. <dependency> <groupId>org.springfra

  • SpringBoot 定制化返回数据的实现示例

    此时我们的返回结构如下: { "code": 200, "msg": "ok", "data": { "id": 1, "username": "steve", "secretKey": "xxx", "expiredAt": null, "createdAt": "2020-0

  • Pytorch 抽取vgg各层并进行定制化处理的方法

    工作中有时候需要对vgg进行定制化处理,比如有些时候需要借助于vgg的层结构,但是需要使用的是2 channels输入,等等需求,这时候可以使用vgg的原始结构用class重写一遍,但是这样的方式比较慢,并且容易出错,下面给出一种比较简单的方式 def define_vgg(vgg,input_channels,endlayer,use_maxpool=False): vgg_ad = copy.deepcopy(vgg) model = nn.Sequential() i = 0 for la

  • SpringBoot Web详解静态资源规则与定制化处理

    目录 1.相关概念 2.静态资源目录 3.静态资源访问前缀 4.欢迎页支持 5.自定义favicon 6.源码分析 1.相关概念 Spring Boot 默认为我们提供了静态资源处理,使用 WebMvcAutoConfiguration 中的配置各种属性. 建议使用Spring Boot的默认配置方式,如果需要特殊处理的再通过配置文件进行修改. 如果想要自己完全控制WebMVC,就需要在@Configuration注解的配置类上增加@EnableWebMvc, 增加该注解以后WebMvcAuto

  • SpringBoot嵌入式Servlet容器与定制化组件超详细讲解

    目录 嵌入式Servlet容器 1.原理分析 2.Servlet容器切换 3.定制Servlet容器配置 定制化组件 嵌入式Servlet容器 在Spring Boot中,默认支持的web容器有 Tomcat, Jetty, 和 Undertow 1.原理分析 那么这些web容器是怎么注入的呢?我们一起来分析一下 当SpringBoot应用启动发现当前是Web应用,它会创建一个web版的ioc容器ServletWebServerApplicationContext 这个类下面有一个createW

  • SpringBoot外部化配置使用Plus版的方法示例

    PS: 之前写过一篇关于 SpringBoo 中使用配置文件的一些姿势,不过嘛,有句话(我)说的好:曾见小桥流水,未睹观音坐莲!所以再写一篇增强版,以便记录. 序言 上一篇博客记录,主要集中在具体的配置内容,也就是使用 @ConfigurationProperties 这个注解来进行配置与结构化对象的绑定,虽然也顺带说了下 @Value 的使用以及其区别. 在这篇记录中,打算从总览,鸟瞰的俯视视角,来从整体上对 SpringBoot ,乃至 Spring Framework 对于外部化配置文件处

  • SpringBoot全局异常处理与定制404页面的方法

    一.错误处理原理分析 使用SpringBoot创建的web项目中,当我们请求的页面不存在(http状态码为404),或者器发生异常(http状态码一般为500)时,SpringBoot就会给我们返回错误信息. 也就是说,在SpringBoot的web项目中,会自动创建一个/error的错误接口,来返回错误信息.但是针对不同的访问方式,会有以下两种不同的返回信息.这主要取决于你访问时的http头部信息的Accept这个值来指定你可以接收的类型有哪些 使用浏览器访问时的头信息及其返回结果 Accep

  • SpringBoot快速构建应用程序方法介绍

    首先介绍一下SpringBoot在Coding上的使用场景.Coding中使用SpringBoot搭建的Email服务. 之所以选择SpringBoot,原因就是更加轻量级.在往常的Spring项目中,依赖的库太多,配置太繁杂,用在这只提供Email服务的程序上未免也小题大做了.而SpringBoot提供一些非功能性的常见的大型项目类特性(如内嵌服务器.安全.度量.健康检查.外部化配置)使得我们在部署上也更为方便,如可以直接地内嵌Tomcat/Jetty(不需要单独去部署war包) 1.Spri

  • 详解SpringBoot定制@ResponseBody注解返回的Json格式

     1.引言 在SpringMVC的使用中,后端与前端的交互一般是使用Json格式进行数据传输,SpringMVC的@ResponseBody注解可以很好的帮助我们进行转换,但是后端返回数据给前端往往都有约定固定的格式,这时候我们在后端返回的时候都要组拼成固定的格式,每次重复的操作非常麻烦. 2.SpringMVC对@ResponseBody的处理 SpringMVC处理@ResponseBody注解声明的Controller是使用默认的.RequestResponseBodyMethodProc

  • SpringBoot如何自定义starter

    目录 1. 什么是starter 2. 自动配置原理 2.1 自动配置生效 3. 自定义starter 3.1 命名规范 4.总结 4.1为什么要自定义starter? 4.2 自定义starter的案例 1. 什么是starter Springboot的出现极大的简化了开发人员的配置,而这之中的一大利器便是springboot的starter,starter是springboot的核心组成部分,为什么说引入如下依赖就满足了日常web开发? <dependency>   <groupId

  • SpringBoot中获取profile的方法详解

    目录 spring boot与profile 静态获取方式 autowire ProfileConfig spring boot与profile spring boot 的项目中不再使用xml的方式进行配置,并且,它还遵循着约定大于配置. 静态获取方式 静态工具类获取当前项目的profile环境. import org.springframework.beans.BeansException; import org.springframework.context.ApplicationConte

随机推荐