SpringBoot中@Conditional注解
SpringBoot 注解 Conditional
2023-09-27 14:27:14 时间
放个图先
这个@Conditional
之类的注解在ClassParserConfiguration
类的parse
方法得到处理。
class ClassParserConfiguration{
...
public void parse(Set<BeanDefinitionHolder> configCandidates) {
for (BeanDefinitionHolder holder : configCandidates) {
BeanDefinition bd = holder.getBeanDefinition();
try {
if (bd instanceof AnnotatedBeanDefinition) {
parse(((AnnotatedBeanDefinition) bd).getMetadata(), holder.getBeanName());
}
else if (bd instanceof AbstractBeanDefinition && ((AbstractBeanDefinition) bd).hasBeanClass()) {
parse(((AbstractBeanDefinition) bd).getBeanClass(), holder.getBeanName());
}
else {
parse(bd.getBeanClassName(), holder.getBeanName());
}
}
catch (BeanDefinitionStoreException ex) {
throw ex;
}
catch (Throwable ex) {
throw new BeanDefinitionStoreException(
"Failed to parse configuration class [" + bd.getBeanClassName() + "]", ex);
}
}
// 这里面处理的
// @EnableAutoConfiguration的@Import(AutoConfigurationImportSelector.class)的AutoConfigurationImportSelector就是一个DeferredImportSelector接口实现类
this.deferredImportSelectorHandler.process();
}
...
}
然后进到上面代码块的最后一行后,最终到达AutoConfigurationImportSelector.class
的代码:
class AutoConfigurationImportSelector{
protected AutoConfigurationEntry getAutoConfigurationEntry(AnnotationMetadata annotationMetadata) {
if (!isEnabled(annotationMetadata)) {
return EMPTY_ENTRY;
}
AnnotationAttributes attributes = getAttributes(annotationMetadata);
List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes);
configurations = removeDuplicates(configurations);
Set<String> exclusions = getExclusions(annotationMetadata, attributes);
checkExcludedClasses(configurations, exclusions);
configurations.removeAll(exclusions);
// 这里进行对@Conditional的注解类进行filter
configurations = getConfigurationClassFilter().filter(configurations);
fireAutoConfigurationImportEvents(configurations, exclusions);
return new AutoConfigurationEntry(configurations, exclusions);
}
}
相关文章
- SpringBoot系列之@PropertySource和@Value注解(二)
- SpringBoot的配置文件bootstrap与application的作用以及区别
- 使用IDEA创建一个springboot项目
- SpringBoot中的特殊注解
- Mac 安装 memcached SpringBoot 使用 Memcached 缓存
- SpringBoot 快速整合 Mybatis(去XML化+注解进阶)
- SpringBoot中使用@Async注解使用及其失效问题解决
- SpringBoot自动配置源码
- springboot实战之自定义注解扫描并动态注册bean
- springBoot----@ConditionalOnxxx相关注解总结
- SpringBoot——yml配置文件的书写和读取
- SpringBoot 使用自定义注解 +AOP+Redis 实现接口限流
- SpringBoot注解总结
- SpringBoot 注解
- SpringBoot集成JPA
- SpringBoot@RequestParam @RequestBody @PathVariable 等参数绑定注解详解
- SpringBoot整合ActiveMQ
- SpringBoot使用Redis缓存
- SpringBoot读取配置文件
- springboot集成junit测试与javamail测试遇到的问题
- Springboot之@Transactional事务注解原理详解
- SpringBoot入门十(整合之Junit测试)
- SpringBoot入门二(java代码方式配置)
- SpringBoot学习-@Validated注解自定义参数校验工具
- springBoot项目配置错误问题-@EnableWebMvc注解问题导致SpringBoot默认配置失效
- SpringBoot魔法堂:@MatrixVariable参数注解使用详解
- springboot mybatis自定义枚举enum转换
- SpringBoot 实现自定义注解
- SpringBoot注解大全(转)
- springBoot引入laydate
- springboot整合webservice