这篇文章给大家分享的是有关SpringBoot怎么自定义Starter的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
什么是Starter
Starter是Spring Boot中的一个非常重要的概念,Starter相当于模块,它能将模块所需的依赖整合起来并对模块内的Bean根据环境( 条件)进行自动配置。
使用者只需要依赖相应功能的Starter,无需做过多的配置和依赖,Spring Boot就能自动扫描并加载相应的模块并设置默认值,做到开箱即用
为什么使用Starter
在我们的日常开发工作中,经常会有一些独立于业务之外的配置模块,我们经常将其放到一个特定的包下,然后如果另一个工程需要复用这块功能的时候,需要将代码硬拷贝到另一个工程,重新集成一遍,麻烦至极。
如果我们将这些可独立于业务代码之外的功配置模块封装成一个个starter,并在starter中设置好默认值,复用的时候只需要将其在pom中引用依赖即可,Spring Boot为我们完成自动装配,做到开箱即用。
Springboot自动配置
SpringBoot中的starter是一种非常重要的机制,能够抛弃以前繁杂的配置,将其统一集成进starter,应用者只需要在maven中引入starter依赖,Spring Boot就能自动扫描各个jar包下classpath路径的spring.factories文件,加载自动配置类信息,加载相应的bean信息并启动相应的默认配置。
Spring Boot提供了针对日常企业应用研发各种场景的spring-boot-starter依赖模块。所有这些依赖模块都遵循着约定成俗的默认配置,并允许我们调整这些配置,即遵循“约定大于配置”的理念。
大家可以看看我之前写的一篇文章,详细介绍了springboot自动配置的流程:一文搞懂SpringBoot自动配置原理
spring.factories
Spring Boot会默认扫描跟启动类平级的包,如果我们的Starter跟启动类不在同一个主包下,需要通过配置spring.factories文件来配置生效,SpringBoot默认加载各个jar包下classpath路径的spring.factories文件,配置的key为org.springframework.boot.autoconfigure.EnableAutoConfiguration
Starter开发常用注解
注解使用已经大大方便我们开发,再也不需要写xml配置文件了,SpringBoot经过查找spring.factories文件,加载自动配置类,而自动配置类中定义了各种运行时判断条件,如@ConditionalOnMissingBean(A.class)等,只要ioc容器中没有指定的A类型的bean信息,该配置文件才会生效。
@Conditional是Spring4新提供的注解,它的作用是按照一定的条件进行判断,满足条件给容器注册bean。
1.属性映射注解
@ConfigurationProperties :配置文件属性值和实体类的映射
@EnableConfigurationProperties:和@ConfigurationProperties配合使用,把@ConfigurationProperties修饰的类加入ioc容器。
2.配置bean注解
@Configuration :标识该类为配置类,并把该类注入ioc容器
@Bean :一般在方法上使用,声明一个bean,bean名称默认是方法名称,类型为返回值。
3.条件注解
@Conditional:是根据条件类创建特定的Bean,条件类需要实现Condition接口,并重写matches接口来构造判断条件。
@ConditionalOnBean :容器中存在指定bean,才会实例化一个Bean
@ConditionalOnMissingBean:容器中不存在指定bean,才会实例化一个Bean
@ConditionalOnClass:系统中有指定类,才会实例化一个Bean
@ConditionalOnMissingClass:系统中没有指定类,才会实例化一个Bean
@ConditionalOnExpression:当SpEl表达式为true的时候,才会实例化一个Bean
@AutoConfigureAfter :在某个bean完成自动配置后实例化这个bean
@AutoConfigureBefore :在某个bean完成自动配置前实例化这个bean
@ConditionalOnJava :系统中版本是否符合要求
@ConditionalOnSingleCandidate:当指定的Bean在容器中只有一个,或者有多个但是指定了首选的Bean时触发实例化
@ConditionalOnResource:类路径下是否存在指定资源文件
@ConditionalOnWebApplication:是web应用
@ConditionalOnNotWebApplication:不是web应用
@ConditionalOnJndi:JNDI指定存在项
@ConditionalOnProperty: 配置Configuration的加载规则
prefix :配置属性名称的前缀
value :数组,获取对应property名称的值,与name不可同时使用
name :数组,可与prefix组合使用,组成完整的配置属性名称,与value不可同时使用
SpringBoot怎么自定义Starter