Spring boot如何写一个自定义的auto-configuration(上)
来源:互联网 发布:宇宙射线知乎 编辑:程序博客网 时间:2024/06/05 07:31
Spring boot如何写一个自定义的auto-configuration(上)
这篇文章来自于spring官方文章。首先会说明要做auto-configuration理解的内容,之后来一步一步的说明如何做。
文章在此
理解自动配置
auto-configured
类在spring boot中,自定配置是通过
@Configuration
的类实现的。可选的@Conditional
注解用来限制什么自动配置生效。通常情况下,自动配置的类上会使用@ConditionalOnClass
和@ConditionalOnMissingBean
两个注解。这保证了自动配置的可用性,只有符合某种情况下才生效。否则就像spring boot的一些自动配置一样,会强制生效,比如dataSourceAutoConfigure
定位
auto-configuration
配置spring boot通过检查jar包中
META-INF/spring.factories
这个文件,确定自动配置的key是什么.org.springframework.boot.autoconfigurer.EnableAutoConfiguration=\com.mycorp.libx.autoconfigure.LibXAutoConfiguration,\com.mycorp.libx.autoconfigure,LibXWebAutoConfiguration
你可以使用
@AutoConfigureAfter
和@AutoConfigureBefore
注解,如果你的配置需要规定特定的顺序。比如说,如果你提供web方面的自动配置,那么就必须在WebMvcAutoConfiguration
之后。如果不需要配置之间互相关联或者明确指定顺序,可以使用
@AutoconfigureOrder
进行注解,这个会自动安排配置的顺序。这里有一个note是讲,合理安排自动配置的包,避免被特定的component scan给扫到。这个的意思应该是说, 这些是由spring boot启动的时候扫描的,而不是应该由其他来处理。
条件配置
主要使用
@Conditional
和@ConditionalOnMissingBean
。两者可以用在class或者@Bean
方法上@ConditionalOnBean
@@ConditionOnMissingBean
@ConditionalOnProperty
@ConditionalOnResource
@ConditionalOnWebApplication
ConditionalOnExpression
创建自定义的starter
一个自动配置的library应该包括两部分:
* `autoconfigure` 模块,包含自动配置的code* `starter`模块, 提供提供额外的依赖。简单来说,提供这个就可以使用starter了
看起来很简单并且容易懂,一个来提供配置,另外一个来提供自己这个功能所需要的dependency.
Name
最好不要使用spring-boot开头的module,即使groupId与spring boot的groupId不同,因为这样可能未来和spring boot冲突。
最好的命名规则。 比如说要创建一个
acme
的auto configure,那么命名应该是acme-spring-boot-autoconfigure
和acme-spring-boot-starter
,如果只使用一个module,那么就使用acme-spring-boot-starter
配置的命名最好不要使用官方的,应该可能未来他们会修改,避免造成影响。这是spring boot他们的。
确保
trigger meta-data generation
所以IDE也可以使用这些自动配置的key。这个会生成META-INF/spring-configuration-metadata.json
文件,进行查看是否正确。自动配置module
自动配置module理论上将包含了所有starter需要的配置,可以包括
@ConfigurationProperties
和一些callback的interface用来提供更好的配置starter module
这是一个空的jar,主要用来提供这个功能必须的依赖。
接下来我们来根据理解写一个自动配置的auto-configurer吧, 接下下篇。
- Spring boot如何写一个自定义的auto-configuration(上)
- Spring boot如何写一个自定义的auto-configuration(下)
- spring boot--creating your own auto-configuration
- 理解Spring Boot中的auto-configuration
- Spring Boot自动配置(Auto-Configuration),@EnableAutoConfiguration,Spring Beans和依赖注入
- Spring Boot No auto configuration classes found in META-INF/spring.factories
- Spring Boot之No session repository could be auto-configured, check your configuration问题解决
- Spring Boot之No session repository could be auto-configured, check your configuration问题解决
- Spring Boot Externalized Configuration
- 用Kotlin写一个基于Spring Boot的RESTful服务
- 用Kotlin写一个基于Spring Boot的RESTful服务
- 利用spring boot 写一个稳定的爬虫
- L上自定义一个属性,如何开启这个属性的写的权限
- Spring Boot(上)
- 如何在spring-boot中自定义dispatchServlet的访问路径
- spring-boot 如何加载rsources下面的自定义配置文件
- 如何写一个框架:步骤(上)
- 如何写一个自定义标签
- Windows下Mongodb安装及配置
- Python基础--模块
- java设计模式之代理模式
- Facebook Surround 360 环境配置指南
- python聚类
- Spring boot如何写一个自定义的auto-configuration(上)
- 存储过程简介
- java通过sms发送短信
- 中文乱码问题
- springmvc踩坑记
- Qt 的线程与事件循环
- Java中CAS详解
- 文章标题
- Redis作者谈Redis应用场景