SpringBoot自动化配置原理-打造自己的spring-boot-starter组件

打造属于个人的简单spring-boot-starter组件

先上 GitHub地址,里面有例子的源码。

先说下原理:

先从springboot的启动讲起:
从main方法启动类上面的注解SpringBootApplication进去

进一步查看EnableAutoConfiguration,
在这里插入图片描述
再次点击这个自动配置导入选择器,他会自动导入META-INF/spring.factories 里面的实现类加入spring的ioc容器。这里涉及到 Java 的 SPI 机制。
在这里插入图片描述
随便点开 里面有形形式式的配置类
在这里插入图片描述
那我们明白了 他会加载这个文件的类进spring的ioc容器,那我们在这里做好自动的配置的实例化不就好了吗?

代码示例:(完整示例代码在GitHub) 我这截图说明下情况

新建一个springboot项目

(记得把Main方法去掉,因为这个作为组件,不需要启动 最后是打成jar的)

添加下面两个依赖到pom.xml文件当中。
在这里插入图片描述
其中 spring-boot-configuration-processor 的作用是编译时生成 spring-configuration-metadata.json ,此文件主要给IDE使用。如当配置此jar相关配置属性在 application.yml ,你可以用ctlr+鼠标左键点击属性名,IDE会跳转到你配置此属性的类中。
在这里插入图片描述
在这里插入图片描述
我们日常使用的Spring官方的Starter一般采取spring-boot-starter-{name} 的命名方式,如 spring-boot-starter-web 。
在这里插入图片描述
这个也是我们要在其他地方引入的。

第二步编写我们的Service类

编写简单的接口和实现类,就是利用自动配置原理把这个service注入到spring的ioc容器中 提供给其他项目使用。。。
在这里插入图片描述

第三步设置读取配置文件的属性类

自行设置默认值,O(∩_∩)O哈哈~
在这里插入图片描述

第四步 也是核心的一步 靠它来把配置文件的属性和提供服务(service)的类关联起来

在这里插入图片描述
下面列举SpringBoot中的所有@Conditional注解及作用

@ConditionalOnBean:当容器中有指定的Bean的条件下  
@ConditionalOnClass:当类路径下有指定的类的条件下  
@ConditionalOnExpression:基于SpEL表达式作为判断条件  
@ConditionalOnJava:基于JVM版本作为判断条件  
@ConditionalOnJndi:在JNDI存在的条件下查找指定的位置  
@ConditionalOnMissingBean:当容器中没有指定Bean的情况下  
@ConditionalOnMissingClass:当类路径下没有指定的类的条件下  
@ConditionalOnNotWebApplication:当前项目不是Web项目的条件下  
@ConditionalOnProperty:指定的属性是否有指定的值  
@ConditionalOnResource:类路径下是否有指定的资源  
@ConditionalOnSingleCandidate:当指定的Bean在容器中只有一个,或者在有多个Bean的情况下,用来指定首选的Bean @ConditionalOnWebApplication:当前项目是Web项目的条件下  

最后一步 在resources/META-INF/下创建spring.factories文件,让spring框架去读上面这个自动配置类,并添加如下内容:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.zhifa.starter.autoConfig.StarterAutoConfigure

在这里插入图片描述

打包到本地maven仓库

利用编译器执行 mvn clean install

测试

再新建一个新的springboot项目:
在pom中引入:上面的maven 坐标
在这里插入图片描述
完成测试、、正是执行com.zhifa.starter.service.impl.ZhifaStarterServiceImpl#say方法O(∩_∩)O哈哈~
在这里插入图片描述

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值