Springboot 自定义 starter
今天来和小伙伴们分享这个 Springboot 自定义 starter 😄
直接来到 Springboot
的官方文档中查看~
可以发现,它在这个自动配置的目录中,而经过之前两篇文章的分析 👇
实战分析 👉 花了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
,来给其他人使用
看完官网后我发现貌似也没啥好写的🙃
貌似就这一点点知识了……🐷
- 自动配置的各种条件注解
- 自定义 starter 的命名规范 如:
xxx-spring-boot-starter
那咱们就来看看这个小例子叭😄
思路
-
准备自动配置类
-
配置
spring.factories
-
部署到本地仓库
-
在其他项目中引用
一.自动配置类
这里参考下 redis
的自动配置类
这里使用到了很多条件注解,比如:
@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
命令就可以了
细节注意
-
package 只打包,install 会部署到本地仓库, deploy 才会部署本地和远程仓库
-
spring-boot-configuration-processor
这个包的作用: 给自定义的配置类生成元数据信息的 -
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
总结
最后,老规矩,再画个图总结下~
最后
欢迎小伙伴们来一起探讨问题~
如果你觉得本篇文章还不错的话,那拜托再点点赞支持一下呀😝
让我们开始这一场意外的相遇吧!~
欢迎留言!谢谢支持!ヾ(≧▽≦*)o 冲冲冲!!
我是4ye 咱们下期应该……很快再见!! 😆