浅谈SpringBoot如何自定义Starters

 更新时间:2021年05月24日 10:22:14   作者:明了LM  
今天带大家来学习SpringBoot如何自定义Starters,文中有非常详细的图文介绍及代码示例,对正在学习java的小伙伴们很有帮助,需要的朋友可以参考下

一、Starters原理

1.1 Starters场景启动器

1、场景需要用到的依赖是什么?

比如依赖的jar

2、如何编写自动配置?

以WebMvcAutoConfiguration自动配置为例:

@Configuration
@ConditionalOnWebApplication
@ConditionalOnClass({ Servlet.class, DispatcherServlet.class,
		WebMvcConfigurerAdapter.class })
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10)
@AutoConfigureAfter({ DispatcherServletAutoConfiguration.class,
		ValidationAutoConfiguration.class })
public class WebMvcAutoConfiguration {

	public static final String DEFAULT_PREFIX = "";

	public static final String DEFAULT_SUFFIX = "";

@Configuration指定这是一个配置类
@ConditionalOnXXX 在指定条件成立的情况下自动配置类生效

自动装配顺序
在特定自动装配Class之前 @AutoConfigureBefore
在特定自动装配Class之后@AutoConfigureAfter
指定顺序@AutoConfigureOrder

@Bean 给容器中添加组件
@ConfigurationPropertie结合相关xxxProperties类来绑定相关的配置

@ConfigurationProperties(prefix = "spring.mvc")
public class WebMvcProperties {
}

@EnableConfigurationProperties 让xxxProperties生效加入到容器中

@Configuration
@Import(EnableWebMvcConfiguration.class)
@EnableConfigurationProperties({ WebMvcProperties.class, ResourceProperties.class })
public static class WebMvcAutoConfigurationAdapter extends WebMvcConfigurerAdapter {
}

配置自动装配Bean:
自动配置类要能加载
将需要启动就加载的自动配置类,将标注@Configuration的自动配置类配置在META‐INF/spring.factories下,自动配置类就会生效

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\

3、模式

启动器(starter)

qid

启动器只用来做依赖导入
专门写一个自动配置模块
启动器依赖自动配置,别人只需要引入启动器(starters)

mybatis-spring-boot-starter 自定义启动器名 -spring-boot-starter

二、自定义Starters

构建项目:
1.先创建一个空工程

112
s

2、创建两个模块分别是启动器starter的maven模块spring的初始化器创建的自动配置模块

启动器maven模块

1

自定义的starters

在这里插入图片描述

在这里插入图片描述

spring的初始化器创建模块(创建自动配置相关的模块)

23

三、代码步骤

在启动器starter的pom文件中引入配置类的坐标ming-spring-boot-starter-autoconfigurer

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.ming.springboot</groupId>
    <artifactId>ming-spring-boot-starter</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>com.ming.springboot</groupId>
            <artifactId>ming-spring-boot-starter-autoconfigurer</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

写一个打招呼的功能

package com.ming.springboot;

/**
 * 打招呼的
 *
 */
public class HelloService {

    HelloProperties helloProperties;

    public HelloProperties getHelloProperties() {
        return helloProperties;
    }

    public void setHelloProperties(HelloProperties helloProperties) {
        this.helloProperties = helloProperties;
    }

    public String sayHello(String name){

        return helloProperties.getPrefix()+"-"+name+helloProperties.getSuffix();
    }
}

HelloProperties 和Helloservice 进行属性绑定的

package com.ming.springboot;

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

@ConfigurationProperties(prefix = "com.ming")
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;
    }
}

自动配置类

package com.ming.springboot;

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;

@Configuration
@ConditionalOnWebApplication //web应用才生效
@EnableConfigurationProperties(HelloProperties.class)
public class HelloServiceAutoConfiguration {

    @Autowired
    HelloProperties helloProperties;

    @Bean
    public HelloService helloService(){

        HelloService  helloService = new HelloService();
        helloService.setHelloProperties(helloProperties);
        return  helloService;
    }

}

然后将这两个模块安装到maven仓库中
先安装配置模块因为starter模块依赖配置模块,别人调用我们的starter模块就行了

2

然后将启动器starter也装到仓库中,别人就可以用坐标引入了

在别的项目中引入自定义的启动器starter

   <!--引入自定义的starter-->
        <dependency>
            <groupId>com.ming.springboot</groupId>
            <artifactId>ming-spring-boot-starter</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

配置application.properties

#自定义启动器starter
com.ming.prefix=一起学习
com.ming.suffix=你学费了吗

测试

  @Autowired
    HelloService helloService;

    @Test
    public void starterTest(){
        String sayHello = helloService.sayHello("自定义starter");
        System.out.println(sayHello);
    }

到此这篇关于浅谈SpringBoot如何自定义Starters的文章就介绍到这了,更多相关Spring Boot自定义Starters内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Kotlin中的抽象类实现

    Kotlin中的抽象类实现

    这篇文章主要介绍了Kotlin中的抽象类实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • Spring web开发教程之Request获取3种方式

    Spring web开发教程之Request获取3种方式

    这篇文章主要给大家介绍了关于Spring web开发教程之Request获取3种方式的相关资料,request对象是从客户端向服务器发出请求,包括用户提交的信息以及客户端的一些信息,需要的朋友可以参考下
    2023-11-11
  • Java获取文件的hash值(SHA256)两种方式

    Java获取文件的hash值(SHA256)两种方式

    这篇文章主要给大家介绍了关于Java获取文件hash值(SHA256)的两种方式,SHA256是一种哈希算法,它是不可逆的,也就是说无法解密,需要的朋友可以参考下
    2023-09-09
  • Mybatis实现增删改查(CRUD)实例代码

    Mybatis实现增删改查(CRUD)实例代码

    MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。通过本文给大家介绍Mybatis实现增删改查(CRUD)实例代码 ,需要的朋友参考下
    2016-05-05
  • SpringBoot之使用Feign实现微服务间的交互

    SpringBoot之使用Feign实现微服务间的交互

    这篇文章主要介绍了SpringBoot中使用Feign实现微服务间的交互,对微服务这方面感兴趣的小伙伴可以参考阅读本文
    2023-03-03
  • OpenFeign在传递参数为对象类型是为空的问题

    OpenFeign在传递参数为对象类型是为空的问题

    这篇文章主要介绍了OpenFeign在传递参数为对象类型是为空的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Java通过反射查看类的信息示例

    Java通过反射查看类的信息示例

    这篇文章主要介绍了Java通过反射查看类的信息,结合实例形式详细分析了java基于反射获取类信息的相关原理与实现技巧,需要的朋友可以参考下
    2019-07-07
  • SpringBoot集成Caffeine缓存的实现步骤

    SpringBoot集成Caffeine缓存的实现步骤

    Caffeine cache是一个针对Java的高性能缓存库。在本文中,我们将介绍它与Spring Boot如何一起使用。
    2021-05-05
  • Java中使用内存映射实现大文件上传实例

    Java中使用内存映射实现大文件上传实例

    这篇文章主要介绍了Java中使用内存映射实现大文件上传实例,本文对比测试了FileInputStream 或者FileOutputStream 抑或RandomAccessFile的频繁读写操作,最后总结出映射到内存后进行读写以提高速度,需要的朋友可以参考下
    2015-01-01
  • Java——对象初始化顺序使用详解

    Java——对象初始化顺序使用详解

    本篇文章介绍了,Java对象初始化顺序的使用。需要的朋友参考下
    2017-04-04

最新评论