自定义starter
我们常常将一些通用的功能封装成Jar包,供不同的项目使用。同样在SpringBoot的开发中,也可以将一些通用的功能封装,根据SpringBoot的自动装配的约定,可以封装自己的starter,然后在Spring Boot环境中完成一些通用功能的注入。
原理
哪些Bean可以自动装配
首先,会寻找@Configuration
注解标注的类,添加@Conditional
条件注解约束什么时候可以被装配,通常会用@ConditionalOnClass
和@ConditionalOnMissingBean
,相关的类能找到,并且没有声明的时候注入。
如何定位要装配的Bean
检查Jar包META-INF/spring.factories
下的文件,是否有声明:
1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ |
常用的条件注解
Class Conditions
类条件注解:
@ConditionalOnClass
,指定的类在类路径下生效;@ConditionalOnMissingClass
,指定的类不在类路径下生效。
Bean Conditions
Bean条件:
@ConditionalOnBean
,当需要的Bean存在时,才生效;@ConditionalOnMissingBean
,当Bean不存在时生效。
Property Conditions
@ConditionalOnProperty
基于Spring的环境属性配置包括在内。使用prefix和name属性来指定应检查的属性。默认情况下,匹配任何存在且不等于false的属性。您还可以使用havingValue和matchIfMissing属性创建更高级的检查。
Resource Conditions
@ConditionalOnResource
允许仅在存在特定资源时才包含配置。可以使用常见的Spring约定来指定资源。比如:file:/home/user/test.dat
。
Web Application Conditions
@ConditionalOnWebApplication
和 @ConditionalOnNotWebApplication
注解在程序是否是一个web程序的时候生效。
创建自定义的starter
需求:开发一个starter,读取配置文件,并简单打印出来。
引入依赖
由于是自动装配,需要引入:
1 | <dependencies> |
将配置文件封装一个Bean
1 |
|
对外暴露的接口
1 | public class AuthorService { |
配置类
1 |
|
然后再resources/META-INF/spring.factories
中添加:
1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.abumaster.myself.config.SelfAutoConfig |
打包,发布
1 | mvn package |
使用
在需要用到的模块中引用:
1 | <dependency> |
配置文件中,可以使用定义的配置项:
1 | myself: |
在Java代码中,注入直接使用:
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 张国丰!
评论