Spring starter使用说明

Spring starter

疑问

第三方框架的组件,并不在我们业务项目的包路径下,如果想要被Spring容器管理,那该怎么办呢?

starter机制的使用

以日志的落库为例

1.必要的pom依赖

在这里插入图片描述

2. 编写factories文件

配置接口的实现类名称,spring 启动时会依据改配置进行注入

factories文件

3.配置类编写

在这里插入图片描述

4.有关业务实现

此部分与业务强相关,根据个人业务需求自行实现,不做展示
![在这里插入图片描述](https://img-blog.csdnimg.cn/c11d5a397f9b4658b5d49335ca853354.png)
FAQ
Question1
pom中指定了有关依赖的版本是否会造成冲突?

maven对于依赖是依据tree的路径进行判别的优先使用本系统下的版本信息

Question2
Condition的操作除了常规的还有那些?

其实Condition为接口,实现有关实现类,利用@Condition(value=XXXCondition.class) 就可以自行控制有关条件

spring starter的原理

关键技术点

factories文件是怎么被识别的?

springBoot在启动时,会CLASSPATH下的每个Jar包中遍历搜寻所有META-INF/spring.factories配置文件,并将对于的配置返回,在启动时依据配置类中接口全称进行注入可以认为是spi机制在spring的使用。

spi机制

为解耦的情况下实现启用框架扩展和替换组件,java内置了一种服务提供发现的机制。具体原理与其他方向的使用可参见引用中的文章。
在这里插入图片描述

Condition

由于项目中经常要依据各种情况去实现Bean的管理。Spring提供了Condition机制进行
可查看 org.springframework.context.annotation.Condition中的具体实现,总结来说,可以依据配置,依据其他Bean的注入情况,依据环境等进行条件性的注入。

spring的源码分析

可以认为Condition与SpringStarter机制都是Spring 在实现IOC的基础功能的增强,因此一下源码忽略IOC中讲解,直接介绍在IOC流程中是如何实现的。

spring.factories的load流程

在这里插入图片描述
@EnableAutoConfiguration中包括了@Import({AutoConfigurationImportSelector.class}) 可以认为此部分为入口,进行分析
AutoConfigurationImportSelector的源码

AutoConfigurationImportSelector 实现ImportSelector接口。依据ImportSelector的定义可以判断,selectImports方法提供需要注入的Bean信息。
在这里插入图片描述
根据以上判断进入getAutoConfigurationEntry方法中,configurations是进行了获取候选的Configuration后进行排序与过滤后的数据,即getCandidateConfigurations获取有关配置信息。
在这里插入图片描述
可以看到这里进行了一个断言,其中的含义指的是必须存在springFactories文件的存在。
在这里插入图片描述

ConditionalOnProperty的源码分析

Condition类用于Configuration中所以直接以ConfigurationClassPostProcessor为入口,在做Configuration的后置操作时会将@Bean等注释进行解析由Reader进行处理。可看processConfigBeanDefinitions方法
在这里插入图片描述

其中 ConfigurationClassBeanDefinitionReader中会new 一个ConditionEvaluator 用于进行Condition的操作
在这里插入图片描述
ConditionEvaluator#shouldSkip
在这里插入图片描述

有关引用和学习

spi详解
源码分析

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值