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文件当中给予提示的。
<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(自动配置类)相关推荐
- SpringBoot 自定义starter 保姆级教程(说明+源码+配置+测试)
1.说明 命名归约-官方命名: 前缀:spring-boot-starter-xxx(比如:spring-boot-starter-web) 命名归约-自定义命名: xxx-spring-boot-s ...
- springboot 启动分析【难点】——如何自动扫描 @SpringBootApplication||如何加载自动配置类 @EnableAutoConfiguration||如何加载前端控制器
springboot 启动分析[难点] 自动扫描的特点 默认扫描与 启动类 同级的所有包及其子包都可以自动扫描 如果不可要使用@ComponentScan(basePackage={"&qu ...
- SpringBoot的@Conditional和自动配置类生效
@Conditional原理 在之前的博客中提到了关于自动配置的原理,但是在自动配置的时候有很多的判断,只有当这些判断都成功之后在自动配置的时候才会成功.但是我们会发现一个问题,当我们使用@Be ...
- @configurationproperties注解的使用_徒手使用SpringBoot自定义Starter启动器
前言 在使用SpringBoot框架时,SpringBoot 最强大的功能就是把我们常用的场景抽取封装成了一个个starter,将其称之为场景启动器.搭建项目时,通过引入SpringBoot为我提供的 ...
- SpringBoot SimpleCacheConfiguration的自动配置原理
引言 在之前的博客中分享了简单的SpringBoot缓存的HelloWorld程序,在篇博客中主要来分析一下SpringBoot对于缓存自动配置的原理 缓存自动配置原理 首先在SpringBo ...
- SpringBoot之SpringMVC自动配置
关于SpringBoot中的SpringMVC自动配置的一些思考 : 自动配置 Spring Boot 自动配置好了SpringMVC 以下是SpringBoot对SpringMVC的默认配置:(We ...
- SpringBoot面试杀手锏——自动配置原理
欢迎关注方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/u014745069/ article/details/83820511 引言 不论在工作中,亦或 ...
- 自动配置原理精讲||@Conditional ||怎么知道哪些自动配置类生效? 启用debug=true属性(在配置文件配置);
自动配置原理精讲 派生注解 配置文件怎么配置 server.port spring.config.location="D://application.properties" htt ...
- 【springboot】之自动配置原理
使用springboot开发web应用是很方便,只需要引入相对应的GAV就可以使用对应的功能,springboot默认会帮我们配置好一些常用配置.那么springboot是怎么做到的呢?这篇文章将一步 ...
最新文章
- KVM NAT模式 恢复virbr0
- json-lib的字符串自动转换坑
- 7.2 MASS批量修改数据(剪切板上传数据)
- uml学习之图书借阅简化用例图创建
- matlab求解含两个累加公式的方程,使用fsolve 函数求解含两个参数的多个方程问题,希望有会的人帮...
- Ajax搜索提示功能
- 漫谈 - 从技术业务骨干走向管理
- windows之2012安装vs2017编译环境失败
- Memcache 提高缓存命中率
- 大学计算机导学,大学计算机一级--导学.ppt
- 基于三维地图的智慧园区可视化解决方案,智慧园区导航地图怎么制作?
- ALCO单螺母SN系列面板安装球阀
- centos7安装杀毒软件ClamAV
- 一对一直播app源码开发的前端实现
- 视频剪辑的工作前景是什么?
- 前端封装WebSocket
- 通过数字抖动实现更高精度的PWM脉宽控制
- 【优化理论与方法】线性规划的基本定理
- 随便谈谈IT行业的几个定律
- 给你一台服务器,你能把你写的代码部署到线上吗?
热门文章
- java kafka 拉取_java获取kafka consumer lag
- spring兼容mysql_springboot 最新版本支持 mysql6.0.6吗
- java sqlite 工具类_Java 工具类 - JDBC通用操作基类 BaseDao
- Maven中安装本地Jar包到仓库中或将本地jar包上传
- java中对象的初始化过程
- 虚拟机中安装linux
- .gitignore文件_【第1739期】为Git仓库里的.idea文件夹正名
- 蓝桥杯真题训练 2019.4题
- ef执行原生sql语句_EF Core中执行原生SQL语句
- 规培手册填写模板_9年老资料员经验分享,181套资料员模板+302页工作手册,成为优秀资料员还能提高工作效率,限时分享...