Springboot 自定义 starter

今天来和小伙伴们分享这个 Springboot 自定义 starter 😄

直接来到 Springboot 的官方文档中查看~

https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.developing-auto-configuration

image-20210716063958607

可以发现,它在这个自动配置的目录中,而经过之前两篇文章的分析 👇

实战分析 👉 花了2个钟才搞懂这AOP为啥没生效,水友却睡着了……

原理分析 👉 Springboot自动装配原理探索

相信小伙伴们对这个自动配置和自定义stater 有了初步的了解,那么我们来看看官网是真么说的叭

Auto-configuration can be associated to a “starter” that provides the auto-configuration code as well as the typical libraries that you would use with it.

就是说可以将自动配置类和依赖包进行打包,成为一个 starter ,来给其他人使用

看完官网后我发现貌似也没啥好写的🙃

img

貌似就这一点点知识了……🐷

  • 自动配置的各种条件注解
  • 自定义 starter 的命名规范 如: xxx-spring-boot-starter

那咱们就来看看这个小例子叭😄

思路

  1. 准备自动配置类

  2. 配置 spring.factories

  3. 部署到本地仓库

  4. 在其他项目中引用

一.自动配置类

这里参考下 redis 的自动配置类

image-20210717113904485

这里使用到了很多条件注解,比如:

  • @ConditionalOnClass(RedisOperations.class) 当存在这个 RedisOperations.class 时,这个配置才有效,而这个配置又是在我们引入的jar中有的
  • @ConditionalOnMissingBean(name = "redisTemplate") 当没有这个 redisTemplate 的bean时有效
  • @ConditionalOnSingleCandidate(RedisConnectionFactory.class) 确保 RedisConnectionFactory 创建之后才创建这个 redisTemplate

然后,我们自己的就没那么复杂啦,就这么点~

@EnableConfigurationProperties(HelloProperties.class)
public class HelloAutoConfiguration {

    @Bean
    @ConditionalOnMissingBean(HelloTest.class)
    public HelloTest getHelloTest(){
        return new HelloTest();
    }

}

读取 HelloProperties 配置类,然后创建 HelloTest 这个 bean 😄

二.配置 spring.factories

META-INF/spring.factories 中进行配置 如:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.java4ye.demo.config.HelloAutoConfiguration

三.部署到本地仓库

参考官网的命名方式,配置我们的 pom文件👇

<groupId>org.4ye</groupId>
<artifactId>hello-spring-boot-starter</artifactId>
<version>1.0-SNAPSHOT</version>

打包方式选择 <packaging>jar</packaging> 就可以了

这里执行 maven install 命令就可以了

细节注意

  1. package 只打包,install 会部署到本地仓库, deploy 才会部署本地和远程仓库

  2. spring-boot-configuration-processor 这个包的作用: 给自定义的配置类生成元数据信息的

  3. pom 文件中引入 processor 时加入 <optional>true</optional> ,给其他项目选择,不会增加不必要的依赖

四. 其他项目中使用

在其他项目中引入该jar包即可~

<dependency>
    <groupId>org.4ye</groupId>
    <artifactId>hello-spring-boot-starter</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

代码的话呢,我放在 GitHub 上啦

地址👉 https://github.com/RyzeYang/springboot-demo-4ye

image-20210718111521964

总结

最后,老规矩,再画个图总结下~

image-20210718145335585

最后

欢迎小伙伴们来一起探讨问题~

如果你觉得本篇文章还不错的话,那拜托再点点赞支持一下呀😝

让我们开始这一场意外的相遇吧!~

欢迎留言!谢谢支持!ヾ(≧▽≦*)o 冲冲冲!!

我是4ye 咱们下期应该……很快再见!! 😆