首页 > 编程语言 > 详细

SpringBoot(二)原理剖析:AutoConfiguration原理

时间:2021-02-22 23:35:02      阅读:36      评论:0      收藏:0      [点我收藏+]

  AutoConfiguration(自动配置),是指springBoot项目启动时,将bean自动加载到IOC容器,其核心源码在【spring-boot-autoconfigure-**.jar】中。

  自动配置的核心注解是@EnableAutoConfiguration,该注解又引用了两个注解@AutoConfigurationPackage、@Import(AutoConfigurationImportSelector.class)。前者是扫描项目中指定Package下定义的Bean加入到容器中,后者则是从classpath中搜寻所有的META-INF/spring.factories配置文件,并将其中org.springframework.boot.autoconfigure.EnableutoConfiguration对应的配置类加载到容器中。具体加载逻辑可以见: SpringApplication启动原理 

 

Conditional注解分析

  @Conditional表示仅当所有指定条件都匹配时,组件才有资格注册 。该@Conditional注释可以在以下任一方式使用:

  • 作为任何@Bean方法的方法级注释
  • 作为任何类的直接或间接注释的类型级别注释 @Component,包括@Configuration类
  • 作为元注释,目的是组成自定义构造型注释

  @Conditional注解下有多个派生注解,如下图所示,其中@Conditional的参数OnBeanCondition.class是条件校验逻辑处理类:

技术分享图片

注解名称 说明
@ConditionalOnProperty 判断application.properties 或 application.yml 文件中的属性是否符合要求
@ConditionalOnBean 判断应用上下文是否有某个bean
@ConditionalOnMissingBean 判断应用上下文是否没有某个bean
@ConditionalOnClass 判断某个类是否存在 classpath 中
@ConditionalOnExpression 判断某个类是否不在 classpath 中
@ConditionalOnExpression 多个配置属性一起判断
@ConditionalOnResource 判断是否存在指定的资源文件。
@ConditionalOnJava 判断是否符合指定的Java版本要求。
@ConditionalOnWebApplication 判断是web 应用环境才加载bean
@ConditionalOnNotWebApplication 判断不是web 应用环境才加载bean

 

自定义Conditional

   1.添加自定义注解

@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD })
@Documented
@Conditional(CustomCondition.class)
public @interface CustomConditionalAnnotation {
    
    String[] value() default {};
}

  2.编写条件处理器

public class CustomCondition implements Condition {

    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        Map<String, Object> annotationMap = metadata.getAnnotationAttributes(CustomConditionalAnnotation.class.getName());
        String[] properties = (String[]) annotationMap.get("value");
        for (String property : properties) {
            if (StringUtils.isEmpty(context.getEnvironment().getProperty(property))) {
                return false;
            }
        }
        return true;
    }

}

 

SpringBoot(二)原理剖析:AutoConfiguration原理

原文:https://www.cnblogs.com/ryjJava/p/14427242.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!