SpringBoot中自定义starter

这篇具有很好参考价值的文章主要介绍了SpringBoot中自定义starter。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SpringBoot三种创建方式

一、在线创建

首先打开 https://start.spring.io 这个网站,如下:
SpringBoot中自定义starter,SpringBoot,自定义starter

  • 项目构建工具是 Maven 还是 Gradle ?有人用 Gradle 做 Java 后端项目,但是整体感觉 Gradle 在 Java 后端中使用的还是比较少,Gradle 在 Android 中使用较多,Java 后端,目前来看还是 Maven 为主,因此这里选择第一项。
  • 开发语言,这个当然是选择 Java 了
  • Spring Boot 版本,可以看到,目前最新的稳定版是 2.1.7 ,这里我们就是用最新稳定版。
  • 既然是 Maven 工程,当然要有项目坐标,项目描述等信息了,另外这里还让输入了包名,因为创建成功后会自动创建启动类
  • Packing 表示项目要打包成 jar 包还是 war 包,Spring Boot 的一大优势就是内嵌了 Servlet 容器,打成 jar 包后可以直接运行,所以这里建议打包成 jar 包,当然,开发者根据实际情况也可以选择 war 包。
  • 然后选选择构建的 JDK 版本。
  • 最后是选择所需要的依赖,输入关键字如 web ,会有相关的提示,这里我就先加入 web 依赖。

二、开发工具创建

SpringBoot中自定义starter,SpringBoot,自定义starter
然后点击 Next ,填入 Maven 项目的基本信息,如下:
SpringBoot中自定义starter,SpringBoot,自定义starter
再接下来选择需要添加的依赖,如下图:
SpringBoot中自定义starter,SpringBoot,自定义starter
勾选完成后,点击 Next 完成项目的创建。

Eclipse 派系的 STS 给大家参考, STS 创建 Spring Boot 项目,实际上也是从上一小节的那个网站上来的,步骤如下:
SpringBoot中自定义starter,SpringBoot,自定义starter
然后在打开的页面中填入项目的相关信息,如下图:
SpringBoot中自定义starter,SpringBoot,自定义starter
最后一路点击 Next ,完成项目的创建

三、Maven创建

首先创建一个普通的 Maven 项目,以 IntelliJ IDEA 为例,创建步骤如下:
SpringBoot中自定义starter,SpringBoot,自定义starter
注意这里不用选择项目骨架(如果大伙是做练习的话,也可以去尝试选择一下,这里大概有十来个 Spring Boot 相关的项目骨架),直接点击 Next ,下一步中填入一个 Maven 项目的基本信息,如下图:
SpringBoot中自定义starter,SpringBoot,自定义starter
然后点击 Next 完成项目的创建。

创建完成后,在 pom.xml 文件中,添加如下依赖:

<parent>
	<groupId>org.springframework.boot</groupId>    
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>2.1.7.RELEASE</version>
</parent>

<dependencies>
	<dependency>  
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
</dependencies>

【spring-boot-starter-parent】的理解:

  • 定义了 Java 编译版本为 1.8
  • 使用 UTF-8 格式编码
  • 继承自 spring-boot-dependencies,这个里边定义了依赖的版本,也正是因为继承了这个依赖,所以我们在写依赖时才不需要写版本号。
  • 执行打包操作的配置
  • 自动化的资源过滤
  • 自动化的插件配置
  • 针对 application.properties 和 application.yml 的资源过滤,包括通过 profile 定义的不同环境的配置文件,例如 application-dev.properties 和 application-dev.yml

添加成功后,再在 java 目录下创建包,包中创建一个名为 App 的启动类,如下:

@EnableAutoConfiguration //注解表示开启自动化配置
@RestController
public class App{
	
	public static void main(String[] args){
		SpringApplication.run(App.class,args);
	} 
	@GetMapping("/hello")
	public String hello(){
		return "hello";
	}
}

项目结构如下:
SpringBoot中自定义starter,SpringBoot,自定义starter

===========================================================

SpringBoot自动装配原理:

  1. @EnableAutoConfiguration注解开启自动装配功能,该注解通常放在应用的主类上。
  2. spring.factories文件位于META-INF目录下的配置文件中定义各个自动装配类的全限定名

当SpringBoot启动时,会加载classpath下所有的spring.factories文件,并根据定义的自动配置类全限定名,将其实例化并添加到Spring应用上下文中。
自动配置类通常会通过@Configuration注解标注(@ComponentScan/@Import等)实现各种逻辑

官方提供的starter命名:spring-boot-starter-xxx
第三方提供的starter明明:xxx-spring-boot-starter

SpringBoot常见的starter

SpringBoot中自定义starter,SpringBoot,自定义starter

====================================================

自定义一个redisson的starter

一、创建按一个SpringBoot项目,命名:redisson-spring-boot-starter

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <version>2.3.1.RELEASE</version>
        <!-- 不让jar进行传递 避免jar包冲突-->
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.redisson</groupId>
        <artifactId>redisson</artifactId>
        <version>3.13.1</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

二、创建配置解析类RedissonProperties

@ConfigurationProperties(prefix = "tian.redisson")
public class RedissonProperties{
	
	private String host = "localhost";
	private int port = 6379;
	private int timeout;

	//get   set 省略
}

三、自动装配类

@EnableConfigurationProperties(RedissonProperties.class)
@Configuration
public class RedissonAutoConfiguration{
	
	private static final String PREFIX = "redis://";

	@Bean
	public RedissonClient redissonClient(RedissonProperties redissonProperties){
		
		Config config = new Config();

		//redis单机模式
		config.useSingleServer().setAddress(PREFIX+redissonProperties.getHost()+":"+redissonProperties.getPort())
			.setConnectTimeout(redissonProperties.getTimeout());

		return Redisson.create(config);
	}
}

四、resources目录下创建META-INF,在此目录下创建spring.factories文件

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.tian.RedissonAutoConfiguration

五、使用自定义starter

再创建一个SpringBoot项目,引入自定义starter

<dependency>
    <groupId>com.tian</groupId>
    <artifactId>charge-sms-spring-boot-starter</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

ResissonProperties类中对host和port赋予了默认值,所以在application.properties配置文件中若不配任何参数,使用的就是默认值。
也可以配置

tian.redisson.host=localhost
tian.redisson.port=6379
tian.redisson.timeout=1000

六、实际应用

@Slf4j
@RestController
@RequestMapping("/test")
public class TestController{
	
	@Resource
	private RedissonClient redissonClient;

	@GetMapping("/redisson")
	public String redisson(){
		
	}
}

SpringBoot中自定义starter,SpringBoot,自定义starter

配置提示功能
SpringBoot中自定义starter,SpringBoot,自定义starter

在META-INF下面创建一个文件 additional-spring-configuration-metadata.json
文件内容如下:

{
  "properties": [
    {
      "name": "tian.redisson.host",
      "type": "java.lang.String",
      "description": "redis服务地址ip",
      "defaultValue": "localhost"
    },
    {
      "name": "tian.redisson.port",
      "type": "java.lang.Integer",
      "description": "redis服务端口号",
      "defaultValue": 6379
    },
    {
      "name": "tian.redisson.timeout",
      "type": "java.lang.Integer",
      "description": "redis连接超时时间",
      "defaultValue": 1000
    }
  ]
}

重新打包,在使用的项目里执行Reload All Maven,再去properties中就会有对应的提示了。

==========================================================

自定义starter项目二

一、创建maven项目

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-autoconfigure</artifactId>
    <version>2.1.8.RELEASE</version>
</dependency>

application.properties

javaboy.name=zhangsan
javaboy.msg=java

创建一个 HelloProperties 类,用来接受 application.properties 中注入的值,如下:

@ConfigurationProperties(prefix = "javaboy")
publicclass HelloProperties {

    private staticfinal String DEFAULT_NAME = "jordan";
    private staticfinal String DEFAULT_MSG = "篮球之神";
    
    private String name = DEFAULT_NAME;
    private String msg = DEFAULT_MSG;
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
}

定义一个 HelloService ,然后定义一个简单的 say 方法, HelloService 的定义如下:

public class HelloService {

    private String msg;
    private String name;
    
    public String sayHello() {
        return name + " say " + msg + " !";
    }
    
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

二、自定义配置类

  • @EnableConfigurationProperties 注解是使我们之前配置的 @ConfigurationProperties 生效,让配置的属性成功的进入 Bean 中
  • @ConditionalOnClass 表示当项目当前 classpath 下存在 HelloService 时,后面的配置才生效
  • 自动配置类中首先注入 HelloProperties ,这个实例中含有我们在 application.properties 中配置的相关数据
  • 提供一个 HelloService 的实例,将 HelloProperties 中的值注入进去
@Configuration
@EnableConfigurationProperties(HelloProperties.class)
@ConditionalOnClass(HelloService.class)
public class HelloServiceAutoConfiguration{
	
	@Autowired
	HelloProperties helloProperties;

	@Bean
	HelloService helloService(){
		HelloService helloService = new HelloService();
        helloService.setName(helloProperties.getName());
        helloService.setMsg(helloProperties.getMsg());
        return helloService;
	}
}

三、创建spring.factories文件

该文件的作用是指定自动化配置类的路径

org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.javaboy.mystarter.HelloServiceAutoConfiguration

SpringBoot启动类中的注解@SpringBootApplication(源码可以得出是一个组合注解)
其中的一个组合项就是 @EnableAutoConfiguration启用 Spring 应用程序上下文的自动配置,会自动导入一个名为 AutoConfigurationImportSelector 的类,而这个类会去读取一个名为 spring.factories 的文件, spring.factories 中则定义需要加载的自动化配置类

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
		@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM,
				classes = AutoConfigurationExcludeFilter.class) })
public@interface SpringBootApplication {
}

四、本地安装

自动化配置类打包,然后上传到 Maven 私服上,供其他同事下载使用

在 IntelliJ IDEA 中,点击右边的 Maven Project ,然后选择 Lifecycle 中的 install ,双击即可。安装到本地仓库
SpringBoot中自定义starter,SpringBoot,自定义starter

五、使用Starter

新建一个普通的 Spring Boot 工程,这个 Spring Boot 创建成功之后,加入我们自定义 Starter 的依赖,如下:

<dependency>
    <groupId>org.javaboy</groupId>
    <artifactId>mystarter</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

引入了上面自定义的 Starter ,也即项目中现在有一个默认的 HelloService 实例可以使用,而且关于这个实例的数据,我们还可以在 application.properties 中进行配置,如下:

javaboy.name=牧码小子
javaboy.msg=java

测试

@RunWith(SpringRunner.class)
@SpringBootTest
publicclass UsemystarterApplicationTests {

    @Autowired
    HelloService helloService;
    @Test
    public void contextLoads() {
        System.out.println(helloService.sayHello());
    }
}

SpringBoot中自定义starter,SpringBoot,自定义starter文章来源地址https://www.toymoban.com/news/detail-683869.html

到了这里,关于SpringBoot中自定义starter的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot之自定义starter

    目录 一、什么是SpringBoot starter机制 二、为什么要自定义starter 三、什么时候需要创建自定义starter 四、自动加载核心注解说明 五、自定义starter的开发流程 案例一:为短信发送功能创建一个starter 案例二:AOP方式统一服务日志 SpringBoot中的starter是一种非常重要的机制(自动化配

    2024年02月01日
    浏览(42)
  • 自定义一个springboot starter

    在我们的日常开发工作中,经常会有一些独立于业务之外的配置模块,比如阿里云oss存储的时候,我们需要一个工具类进行文件上传。我们经常将其放到一个特定的包下,然后如果另一个工程需要复用这块功能的时候,需要将代码硬拷贝到另一个工程,重新集成一遍,这样会

    2024年02月05日
    浏览(35)
  • 【实战】SpringBoot自定义 starter及使用

    各位大佬在使用springboot或者springcloud的时候都会根据需求引入各种starter,比如gateway、feign、web、test等等的插件。当然,在实际的业务场景中也会有将第三方组件整合为starter供其他项目接入。那么,我们今天就分享一波SpringBoot自定义 Starter及使用。 SpringBoot starter简介 starter是

    2024年01月22日
    浏览(38)
  • 华为二面:SpringBoot如何自定义Starter?

    Spring Boot的自动配置机制为开发人员提供了一种轻松集成和配置各种功能的便捷方式。然而,随着项目的复杂性增加,更好地组织和分享通用功能变得至关重要。自定义Starter成为了理想的解决方案,旨在简化项目的依赖管理和自动配置,使开发者能够迅速而灵活地集成特定的

    2024年02月21日
    浏览(34)
  • SpringBoot自定义starter之接口日志输出

    本文灵感来源是一道面试题。 要求做一个可以复用的接口日志输出工具,在使用时引入依赖,即可使用。 可能用在多个项目中。 问题处理思路是,自定义一个SpringBoot的Starter,可以加入一些功能配置。核心使用自定义注解、Aspect切面来做。 用切面去切你的自定义注解即可。

    2024年02月08日
    浏览(47)
  • 【Springboot】| 从深入自动配置原理到实现 自定义Springboot starter

    Springboot starter 是SpringBoot的一个重要概念,是“一站式服务 (one-stop)”的依赖 Jar 包包含 Spring 以及相关技术(比如 Redis)的所有依赖提供了自动配置的功能,开箱即用提供了良好的依赖管理,避免了包遗漏、版本冲突等问题。 简单来说, Springboot starter 提供了一种自动配置的机制

    2024年02月11日
    浏览(39)
  • SpringBoot自定义starter开发:IP计数业务功能开发

    🙈作者简介:练习时长两年半的Java up主 🙉个人主页:程序员老茶 🙊 ps:点赞👍是免费的,却可以让写博客的作者开心好久好久😎 📚系列专栏:Java全栈,计算机系列(火速更新中) 💭 格言:种一棵树最好的时间是十年前,其次是现在 🏡动动小手,点个关注不迷路,感

    2024年04月16日
    浏览(36)
  • SpringBoot——原理(自动配置_案例(自定义阿里云文件上starter))

    本文同步更新于鼠鼠之家 starter就是springboot中的起步依赖,虽然springboot已经提供了很多的起步依赖,但是在实际项目开发中可能会用到和第三方的技术,不是所有第三方在springboot中都有收录。 比如之前文章中有用到过的阿里云OSS,阿里云并没有提供起步依赖,导致每次使用

    2024年02月06日
    浏览(46)
  • SpringBoot——原理(自动配置_案例(自定义阿里云文件上传starter))

    本文同步更新于鼠鼠之家 starter就是springboot中的起步依赖,虽然springboot已经提供了很多的起步依赖,但是在实际项目开发中可能会用到和第三方的技术,不是所有第三方在springboot中都有收录。 比如之前文章中有用到过的阿里云OSS,阿里云并没有提供起步依赖,导致每次使用

    2024年02月07日
    浏览(38)
  • SpringBoot3自动配置流程 SPI机制 核心注解 自定义starter

    导入 starter 依赖导入 autoconfigure 寻找类路径下 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件 启动,加载所有 自动配置类 xxxAutoConfiguration 给容器中配置功能 组件 组件参数 绑定到 属性类 中。 xxxProperties 属性类 和 配置文件 前缀项绑定 @Contional 派生的条件

    2024年02月16日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包