SpringBoot自定义Starter(自动配置类)

前言

SpringBoot其实从诞生以来围绕的核心就是快速构建项目,快速构建的前提是有人帮你做好轮子,开发者只要拿来即用就好了,而造好轮子的人就是SpringBoot的开发者,引入自动配置的形式帮助开发者快速创建项目,而自动配置采用的是一种starter模块形式,比如web模块就引入spring-boot-starter-web。而且SpringBoot依旧支持第三方组件融入到SpringBoot的生态圈中,比如Mybatis的组件模块名:mybatis-spring-boot-starter。今天就来分享一下第三方组件是如何引入SpringBoot里面来的。

介绍

自定义starter看懂了之后其实也不是很难,就拿最近我的一个开源框架做示例吧,正好也要开发一个支持SpringBoot的小功能。

iagent:一个采用接口动态代理的形式封装HTTP请求小组件(快速跳转),不过最近打算重构了。

本想着开发这个就是能够在项目中统一一下调用其他厂商HTTP的接口,免得太乱的本质想法开发的,但是自从我接触到微服务之后才发现原来有个Ribbon + Fegin框架,只能说博主的老东家太过传统,自身接触不到这块的东西。

创建

首先需要引入SpringBoot自动配置组件

spring-boot-autoconfigure:自定义starter必备引入jar包

spring-boot-configuration-processor:该组件是用来在properties或者yml文件当中给予提示的。

    
        
            org.springframework.boot
            spring-boot-autoconfigure
        
        
            org.springframework.boot
            spring-boot-configuration-processor
            true
        
    

然后需要一个对应的实体类用来保存properties或yml文件中的环境变量,使用@ConfigurationProperties映射前缀

SpringBoot自定义Starter(自动配置类)_第1张图片

 然后还需要一个自动配置的类

SpringBoot自定义Starter(自动配置类)_第2张图片

 一般自动配置类命名方式为 XXXXAutoConfiguration 表示改类为自动配置类

@Configuration:这个注解不多介绍了,就是表示为配置类

@EnableConfigurationProperties:该注解是用来开启配置参数的注解的,将配置文件中的变量加载到Properties的配置类对象当中,并注入到容器当中

并且SpringBoot还提供了一些@Conditional注解:

@ConditionalOnBean:当SpringIoc容器内存在指定Bean的条件
@ConditionalOnClass:当SpringIoc容器内存在指定Class的条件
@ConditionalOnExpression:基于SpEL表达式作为判断条件
@ConditionalOnJava:基于JVM版本作为判断条件
@ConditionalOnMissingBean:当SpringIoc容器内不存在指定Bean的条件
@ConditionalOnMissingClass:当SpringIoc容器内不存在指定Class的条件
@ConditionalOnNotWebApplication:当前项目不是Web项目的条件
@ConditionalOnProperty:指定的属性是否有指定的值
@ConditionalOnResource:类路径是否有指定的值
@ConditionalOnSingleCandidate:当指定Bean在SpringIoc容器内只有一个,或者虽然有多个但是指定首选的Bean
@ConditionalOnWebApplication:当前项目是Web项目的条件以上注解都是元注解@Conditional演变而来的,根据不用的条件对应创建以上的具体条件注解。

接下来就是加载配置文件了,根据SpringBoot的自动配置原理,SpringBoot会自动加载META-INF/spring.factories文件中的数据

所以还需要加一个配置,这样SpringBoot才能扫描到这个自动配置类。

SpringBoot自定义Starter(自动配置类)_第3张图片

 

org.springframework.boot.autoconfigure.EnableAutoConfiguration表示自动配置类。

这样自定义starter就好了,我们可以写个测试用例试一下。

SpringBoot自定义Starter(自动配置类)_第4张图片

说明自定义starter已经开发好啦

你可能感兴趣的:(SpringBoot,maven,java,spring,boot)