专栏首页业余草手把手教你打造一个SpringBoot自定义的Starter

手把手教你打造一个SpringBoot自定义的Starter

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xmt1139057136/article/details/89090150

第一时间获取技术干货和业界资讯!

SpringBoot 的 Starter 其实并没有什么神奇的。只是最近很多人问起我,而且我的百度搜索指数告诉我,最近搜索 druid-spring-boot-starter 的人在增多。于是,我今天便给大家科普一下,如何自定义实现一个 SpringBoot 的 Starter。

任何的学习都是先从模仿开始的,为此,我们先来看看 mybatis-spring-boot-starter 的结构。然后来对照着模仿一个。

首先,我们打开 mybatis-spring-boot-starter 的 pom.xml 文件,你会发现在它引用的众多 dependency 中有一个 mybatis-spring-boot-autoconfigure。其他的像 JDBC,Mybatis,Spring 都是非 starter 模式整合 Mybatis 必须的,可以忽略不看。

然后,我们顺着 mybatis-spring-boot-autoconfigure 去看看它的 pom.xml 文件。

你会发现里面有两个重要的引用 spring-boot-autoconfigure 和 spring-boot-configuration-processor。

为什么关注这两个呢?因为只有这两个才是 Spring Boot 提供的,其他的都不是。

如果你还没有发现规律,你可以在看看 spring-boot-starter-jdbc 的构造。看的 starter 多了后,你会发现,所有的 starter 中都引入了 spring-boot-configuration-processor 和 spring-boot-autoconfigure。

除此之外,我前面的文章还说过,@Conditional 注解在 SpringBoot 中启动承上启下的作用。根据 @Conditional 引出来的 @ConditionalOnClass、@ConditionalOnMissingBean、@ConditionalOnProperty 等共同构成了一些根据选择,按需配置。

在 SpringBoot 的脑图和源码解读中,我也说过 @SpringBootApplication 会拿到各个 starter 中的 META-INF/spring.factories 中需要自动配置的类的全类名。把自动配置的类全名放入 ImportSelector 中,从而创建了自动配置类,根据自动配置类中的逻辑,进行相应的自动配置。

因此,根据上面的简单解读,下面我们就一起来动手撸一个自定义的 Starter。

先建一个 xttblog-spring-boot-starter 的 Maven 项目,pom.xml 中的配置如下:

其中 spring-boot-configuration-processor 的作用是编译时生成spring-configuration-metadata.json, 此文件主要给 IDE 使用,用于提示使用。如在intellij idea中,当配置此jar相关配置属性在application.yml, 你可以用 ctlr+ 鼠标左键,IDE 会跳转到你配置此属性的类中。没有 spring-boot-configuration-processor 不会出错,但是没有提示,不完美,所以,我们把它也加上。

另外,看我这个 Maven 项目的命名,xttblog-spring-boot-starter 符合 SpringBoot 的要求:{name}-spring-boot-starter。只有官方的 starter ,名字在后面。spring-boot-starter-{name},你可以看看上面我举例的 mybatis 和 druid,都符合命名规范。

接下来,我们的自定义 starter 实现一个简单业务。输入一个字符串,我们输出:“业余草 say,hello字符串www.xttblog.com”。

然后定义 prefix 和 suffix 属性类。

接下来就是最重要的自动配置类。

再重复一下,这几个关键的 @Conditional。

  • @ConditionalOnClass,当 classpath 下发现该类的情况下进行自动配置。
  • @ConditionalOnMissingBean,当 Spring Context 中不存在该 Bean 时。
  • @ConditionalOnProperty 当配置文件中xttblog.hello.service=true时执行。

最后,别忘记了 spring.factories。在 resources/META-INF/ 下创建 spring.factories 文件,内容如下:

最后,你可以运行 mvn:install 打包安装,一个自定义的 Spring Boot Starter 便开发完成了。然后你在其他 SpringBoot 项目中就可以这样使用 xttblog-spring-boot-starter。

具体的测试过程,我就不贴了。大家自己动手,收获更大!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • BAT 面试 Elasticsearch 必会知识点总结

    Elasticsearch 是上市公司 Elastic 开源的一个产品。而 Elasticsearch 支撑了整个 Elastic 公司的大约 50 亿美元的市...

    业余草
  • 使用IntelliJ IDEA 配置Maven(入门)

    1. 下载Maven 官方地址:http://maven.apache.org/download.cgi

    业余草
  • 如何在Gihub上面精准搜索开源项目?

    很多的小伙伴,经常会有这样的困惑,我看了很多技术的学习文档、书籍、甚至视频,我想动手实践,于是我打开了GitHub,想找个开源项目,进行学习,获取项目实战经验。...

    业余草
  • Spring Boot-2.配置基础

    Spring Boot通常以一个名为*Application的类作为入口类,入口类里的main方法(即标准的Java应用的入口方法)作为Spring Boot应...

    悠扬前奏
  • spring boot框架学习10-spring boot持久化数据

    通过前面的学习,我们了解并快速完成了spring boot第一个应用、spring如何读取外部资源文件以及spring boot的web开发.在本章节中我们将要...

    凯哥Java
  • 一起玩转微服务(12)——揭密starter

    Spring Boot的starter主要用来简化依赖用的,对于企业级开发中的与第三方的集成,可以通过一段简单的配置来完成,这样开发人员无需再对包依赖的问题头疼...

    cloudskyme
  • Spring Boot 开箱即用

    新建一个工程需要做很多的基础工作,依赖包引入,基础组件的配置。在微服务大行其道的今天,建立一个新工程是一个家常便饭的事情。其中的工作繁琐且容易出错。在Sprin...

    李鸿坤
  • Spring Boot 2.0.0参考手册_中英文对照_Part III_13

    This section goes into more detail about how you should use Spring Boot. It cove...

    Tyan
  • 仅需四步,写一个springboot starter

    只要你用Springboot,一定会用到各种spring-boot-starter。其实写一个spring-boot-starter

    温安适
  • Kafka、Logstash、Nginx日志收集入门

    Kafka、Logstash、Nginx日志收集入门 Nginx作为网站的第一入口,其日志记录了除用户相关的信息之外,还记录了整个网站系统的性能,对其进行性能排...

    Zephery

扫码关注云+社区

领取腾讯云代金券