spring-boot启动的过程

Spring-boot
仅仅简单了解自动装配的一个简单的过程。

run -> refreshContext -> refresh -> invokeBeanFactoryPostProcessors -> InvokeBeanDefinitionRegistryPostProcessor >

-> …-> selectImport()

加载spring.factories 候选配置类()
加载spring-boot-autoconfigure.properties 元配置 (可去掉不需要的配置,来优化spring-boot的启动)
@ConditionalOnClass():如果 maven 中引入了该类 就将该类初始化到容器中,
@Condition() 根据时间Condition 接口的match 方法去判断是否初始化到容器中。
等等还有许多相似作用,但在不去同情况下使用的注解

@ConditionalOnClass : classpath中存在该类时起效
@ConditionalOnMissingClass : classpath中不存在该类时起效
@ConditionalOnBean : DI容器中存在该类型Bean时起效
@ConditionalOnMissingBean : DI容器中不存在该类型Bean时起效
@ConditionalOnSingleCandidate : DI容器中该类型Bean只有一个或@Primary的只有一个时起效
@ConditionalOnExpression : SpEL表达式结果为true时
@ConditionalOnProperty : 参数设置或者值一致时起效
@ConditionalOnResource : 指定的文件存在时起效
@ConditionalOnJndi : 指定的JNDI存在时起效
@ConditionalOnJava : 指定的Java版本存在时起效
@ConditionalOnWebApplication : Web应用环境下起效
@ConditionalOnNotWebApplication : 非Web应用环境下起效

从spring-autoconfigure-metadata.properties属性文件中提取自动配置元数据AutoConfigurationMetadata;

获取spring.factories属性文件中属性org.springframework.boot.autoconfigure.EnableAutoConfiguration定义的所有配置类作为候选配置类;

然后,获取spring.factories属性文件中属性org.springframework.boot.autoconfigure.AutoConfigurationImportFilter定义的过滤器,缺省是一个 : org.springframework.boot.autoconfigure.condition.OnClassCondition

对所有的候选配置类在自动配置元数据上应用所发现的过滤器,
其实缺省情况下就一个,就是 OnClassCondition,也就是利用每个候选配置类上的注解
@ConditionalOnClass,来看这个候选配置类是否需要被应用。

selectImports()会返回所有需要被应用的配置类(注解@ConditionalOnClass条件被满足),
ConfigurationClassPostProcessor.postProcessBeanFactory()会将识别 这些配置类中定义的bean并将它们注册到容器。

下一步或许应该了解filter的作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值