PHP做克隆网站,seo优化的技巧,黄页网页的推广网站,做网站 用什么空间前言
SpringBoot其实从诞生以来围绕的核心就是快速构建项目#xff0c;快速构建的前提是有人帮你做好轮子#xff0c;开发者只要拿来即用就好了#xff0c;而造好轮子的人就是SpringBoot的开发者#xff0c;引入自动配置的形式帮助开发者快速创建项目#xff0c;而自动配…前言
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文件当中给予提示的。 dependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-autoconfigure/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-configuration-processor/artifactIdoptionaltrue/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已经开发好啦