前言

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文件当中给予提示的。

    <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency></dependencies>

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

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

一般自动配置类命名方式为 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才能扫描到这个自动配置类。

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

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

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

SpringBoot自定义Starter(自动配置类)相关推荐

  1. SpringBoot 自定义starter 保姆级教程(说明+源码+配置+测试)

    1.说明 命名归约-官方命名: 前缀:spring-boot-starter-xxx(比如:spring-boot-starter-web) 命名归约-自定义命名: xxx-spring-boot-s ...

  2. springboot 启动分析【难点】——如何自动扫描 @SpringBootApplication||如何加载自动配置类 @EnableAutoConfiguration||如何加载前端控制器

    springboot 启动分析[难点] 自动扫描的特点 默认扫描与 启动类 同级的所有包及其子包都可以自动扫描 如果不可要使用@ComponentScan(basePackage={"&qu ...

  3. SpringBoot的@Conditional和自动配置类生效

    @Conditional原理    在之前的博客中提到了关于自动配置的原理,但是在自动配置的时候有很多的判断,只有当这些判断都成功之后在自动配置的时候才会成功.但是我们会发现一个问题,当我们使用@Be ...

  4. @configurationproperties注解的使用_徒手使用SpringBoot自定义Starter启动器

    前言 在使用SpringBoot框架时,SpringBoot 最强大的功能就是把我们常用的场景抽取封装成了一个个starter,将其称之为场景启动器.搭建项目时,通过引入SpringBoot为我提供的 ...

  5. SpringBoot SimpleCacheConfiguration的自动配置原理

    引言   在之前的博客中分享了简单的SpringBoot缓存的HelloWorld程序,在篇博客中主要来分析一下SpringBoot对于缓存自动配置的原理 缓存自动配置原理   首先在SpringBo ...

  6. SpringBoot之SpringMVC自动配置

    关于SpringBoot中的SpringMVC自动配置的一些思考 : 自动配置 Spring Boot 自动配置好了SpringMVC 以下是SpringBoot对SpringMVC的默认配置:(We ...

  7. SpringBoot面试杀手锏——自动配置原理

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/u014745069/ article/details/83820511 引言 不论在工作中,亦或 ...

  8. 自动配置原理精讲||@Conditional ||怎么知道哪些自动配置类生效? 启用debug=true属性(在配置文件配置);

    自动配置原理精讲 派生注解 配置文件怎么配置 server.port spring.config.location="D://application.properties" htt ...

  9. 【springboot】之自动配置原理

    使用springboot开发web应用是很方便,只需要引入相对应的GAV就可以使用对应的功能,springboot默认会帮我们配置好一些常用配置.那么springboot是怎么做到的呢?这篇文章将一步 ...

最新文章

  1. KVM NAT模式 恢复virbr0
  2. json-lib的字符串自动转换坑
  3. 7.2 MASS批量修改数据(剪切板上传数据)
  4. uml学习之图书借阅简化用例图创建
  5. matlab求解含两个累加公式的方程,使用fsolve 函数求解含两个参数的多个方程问题,希望有会的人帮...
  6. Ajax搜索提示功能
  7. 漫谈 - 从技术业务骨干走向管理
  8. windows之2012安装vs2017编译环境失败
  9. Memcache 提高缓存命中率
  10. 大学计算机导学,大学计算机一级--导学.ppt
  11. 基于三维地图的智慧园区可视化解决方案,智慧园区导航地图怎么制作?
  12. ALCO单螺母SN系列面板安装球阀
  13. centos7安装杀毒软件ClamAV
  14. 一对一直播app源码开发的前端实现
  15. 视频剪辑的工作前景是什么?
  16. 前端封装WebSocket
  17. 通过数字抖动实现更高精度的PWM脉宽控制
  18. 【优化理论与方法】线性规划的基本定理
  19. 随便谈谈IT行业的几个定律
  20. 给你一台服务器,你能把你写的代码部署到线上吗?

热门文章

  1. java kafka 拉取_java获取kafka consumer lag
  2. spring兼容mysql_springboot 最新版本支持 mysql6.0.6吗
  3. java sqlite 工具类_Java 工具类 - JDBC通用操作基类 BaseDao
  4. Maven中安装本地Jar包到仓库中或将本地jar包上传
  5. java中对象的初始化过程
  6. 虚拟机中安装linux
  7. .gitignore文件_【第1739期】为Git仓库里的.idea文件夹正名
  8. 蓝桥杯真题训练 2019.4题
  9. ef执行原生sql语句_EF Core中执行原生SQL语句
  10. 规培手册填写模板_9年老资料员经验分享,181套资料员模板+302页工作手册,成为优秀资料员还能提高工作效率,限时分享...