使用SpringBoot自定义starter的完整步骤

 更新时间:2020年10月25日 21:53  点击:1392

前言

使用过SpringBoot的都应该知道,一个SpringBoot 项目就是由一个一个 Starter 组成的,一个 Starter 代表该项目的 SpringBoot 启动依赖,除了官方已有的 Starter,我们可以根据自己的需要自定义新的Starter。

一、自定义SpringBoot Starter

自定义Starter,首选需要实现自动化配置,而要实现自动化配置需要满足以下两个条件:

(1)能够自动配置项目所需要的配置信息,也就是自动加载依赖环境;

(2)能够根据项目提供的信息自动生成Bean,并且注册到Bean管理容器中;

要实现自动化配置需要在项目的pom.xml文件中引入如下依赖:

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

根据需要自定义Starter的实现过程大致如下(以我定义的Starter为例):

工程目录结构:

在这里插入图片描述

1、引入项目的配置依赖

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

2、创建xxxService类,完成相关的操作逻辑

代码:StringService.java

public class StringService {

 private String str1;

 private String str2;

 private String default_str;

 public String getStr1() {
  return str1;
 }

 public void setStr1(String str1) {
  this.str1 = str1;
 }

 public String getStr2() {
  return str2;
 }

 public void setStr2(String str2) {
  this.str2 = str2;
 }

 public String getDefault_str() {
  return default_str;
 }

 public void setDefault_str(String default_str) {
  this.default_str = default_str;
 }

 public String addStr(){
  if(str1 != null){
   if(str2 != null){
    return str1 + "," + str2;
   }
   return str1;
  }
  return default_str;
 }

}

3、 定义xxxProperties类,属性配置类,完成属性配置相关的操作,比如设置属性前缀,用于在application.properties中配置

代码:StringProperties.java

//指定项目在属性文件中配置的前缀为str,即可以在属性文件中通过 str.str1=springboot,就可以改变属性类字段 str1 的值了
@SuppressWarnings("ConfigurationProperties")
@ConfigurationProperties(prefix = "str")
public class StringProperties {

 public static final String DEFAULT_STR1 = "I know, you need me";

 public static final String DEFAULT_STR2 = "but I also need you";

 private String str1 = DEFAULT_STR1;

 private String str2 = DEFAULT_STR2;

 public String getStr1() {
  return str1;
 }

 public void setStr1(String str1) {
  this.str1 = str1;
 }

 public String getStr2() {
  return str2;
 }

 public void setStr2(String str2) {
  this.str2 = str2;
 }
}

4、定义xxxConfigurationProperties类,自动配置类,用于完成Bean创建等工作

代码:StringAutoConfiguration.java

// 定义 java 配置类
@Configuration
//引入StringService
@ConditionalOnClass({StringService.class})
// 将 application.properties 的相关的属性字段与该类一一对应,并生成 Bean
@EnableConfigurationProperties(StringProperties.class)
public class StringAutoConfiguration {

 // 注入属性类
 @Autowired
 private StringProperties stringProperties;

 @Bean
 // 当容器没有这个 Bean 的时候才创建这个 Bean
 @ConditionalOnMissingBean(StringService.class)
 public StringService helloworldService() {
  StringService stringService = new StringService();
  stringService.setStr1(stringProperties.getStr1());
  stringService.setStr2(stringProperties.getStr2());
  return stringService;
 }

}

5、在resources下创建目录META-INF,在 META-INF 目录下创建 spring.factories,在SpringBoot启动时会根据此文件来加载项目的自动化配置类

代码:spring.factories

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.lhf.springboot.config.StringAutoConfiguration

6、到这里自定义Starter就定义完成了,只需在其他项目中引入即可使用。

二、其他项目中使用自定义的Starter

1、在新项目中引入自定义Starter依赖配置

创建一个新的SpringBoot项目,在项目的pom.xml文件中引入自定义SpringBoot Starter的依赖配置如下:

<!--引入自定义Starter-->
<dependency>
 <groupId>com.lhf.springboot</groupId>
 <artifactId>spring-boot-starter-string</artifactId>
 <version>0.0.1-SNAPSHOT</version>
</dependency>

2、编写一个简单的Controller

@RestController
public class StringController {

  @Autowired
 private StringService stringService; //引入自定义Starter中的StringService

 @RequestMapping("/")
  public String addString(){
  return stringService.addStr();
 }
}

3、编写属性配置文件,内容如下:

#配置自定义的属性信息
str.str1=为什么我的眼里常含泪水
str.str2=那是因为我对你爱的深沉

4、启动项目进行访问,效果如图:

在这里插入图片描述
在这里插入图片描述

结语:

到此这篇关于使用SpringBoot自定义starter的文章就介绍到这了,更多相关SpringBoot自定义starter内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!

[!--infotagslink--]

相关文章

  • 解决springboot使用logback日志出现LOG_PATH_IS_UNDEFINED文件夹的问题

    这篇文章主要介绍了解决springboot使用logback日志出现LOG_PATH_IS_UNDEFINED文件夹的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-28
  • C#创建自定义控件及添加自定义属性和事件使用实例详解

    这篇文章主要给大家介绍了关于C#创建自定义控件及添加自定义属性和事件使用的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-06-25
  • SpringBoot实现excel文件生成和下载

    这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
  • JS实现自定义简单网页软键盘效果代码

    本文实例讲述了JS实现自定义简单网页软键盘效果。分享给大家供大家参考,具体如下:这是一款自定义的简单点的网页软键盘,没有使用任何控件,仅是为了练习JavaScript编写水平,安全性方面没有过多考虑,有顾虑的可以不用,目的是学...2015-11-08
  • android自定义动态设置Button样式【很常用】

    为了增强android应用的用户体验,我们可以在一些Button按钮上自定义动态的设置一些样式,比如交互时改变字体、颜色、背景图等。 今天来看一个通过重写Button来动态实...2016-09-20
  • 详解springBoot启动时找不到或无法加载主类解决办法

    这篇文章主要介绍了详解springBoot启动时找不到或无法加载主类解决办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-09-16
  • SpringBoot集成Redis实现消息队列的方法

    这篇文章主要介绍了SpringBoot集成Redis实现消息队列的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-10
  • Android自定义WebView网络视频播放控件例子

    下面我们来看一篇关于Android自定义WebView网络视频播放控件开发例子,这个文章写得非常的不错下面给各位共享一下吧。 因为业务需要,以下代码均以Youtube网站在线视...2016-10-02
  • 自定义jquery模态窗口插件无法在顶层窗口显示问题

    自定义一个jquery模态窗口插件,将它集成到现有平台框架中时,它只能在mainFrame窗口中显示,无法在顶层窗口显示. 解决这个问题的办法: 通过以下代码就可能实现在顶层窗口弹窗 复制代码 代码如下: $(window.top.documen...2014-05-31
  • 解决Springboot get请求是参数过长的情况

    这篇文章主要介绍了解决Springboot get请求是参数过长的情况,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-09-17
  • 自定义feignClient的常见坑及解决

    这篇文章主要介绍了自定义feignClient的常见坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-10-20
  • Spring Boot项目@RestController使用重定向redirect方式

    这篇文章主要介绍了Spring Boot项目@RestController使用重定向redirect方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-02
  • Springboot+TCP监听服务器搭建过程图解

    这篇文章主要介绍了Springboot+TCP监听服务器搭建过程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-10-28
  • pytorch 自定义卷积核进行卷积操作方式

    今天小编就为大家分享一篇pytorch 自定义卷积核进行卷积操作方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-05-06
  • springBoot 项目排除数据库启动方式

    这篇文章主要介绍了springBoot 项目排除数据库启动方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-10
  • PHP YII框架开发小技巧之模型(models)中rules自定义验证规则

    YII的models中的rules部分是一些表单的验证规则,对于表单验证十分有用,在相应的视图(views)里面添加了表单,在表单被提交之前程序都会自动先来这里面的规则里验证,只有通过对其有效的限制规则后才能被提交,可以很有效地保证...2015-11-24
  • jquery自定义插件开发之window的实现过程

    这篇文章主要介绍了jquery自定义插件开发之window的实现过程的相关资料,需要的朋友可以参考下...2016-05-09
  • 详解SpringBoot之访问静态资源(webapp...)

    这篇文章主要介绍了详解SpringBoot之访问静态资源(webapp...),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-09-14
  • SpringBoot接口接收json参数解析

    这篇文章主要介绍了SpringBoot接口接收json参数解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-10-19
  • springboot中使用@Transactional注解事物不生效的坑

    这篇文章主要介绍了springboot中使用@Transactional注解事物不生效的原因,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-26