SpringBoot怎么自定义Starter

这篇文章给大家分享的是有关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