SpringBoot自动配置(待完善)

@EnableAutoConfiguration

开启自动解析配置类

  • 根据 classpath 下的依赖自动配置
  • 条件注解自动配置
  • 配置文件配置属性spring.autoconfigure.*
  • 自定义类加@Configuration注解

ImportSelector和DeferredImportSelector

都可以实现配置类分组, DeferredImportSelector可以实现延迟解析配置类上bean(在其他配置类解析完之后)

条件注解

  1. ConditionalOnBean:是否存在某个某类或某个名字的Bean
  2. ConditionalOnMissingBean:是否缺失某个某类或某个名字的Bean
  3. ConditionalOnSingleCandidate:是否符合指定类型的Bean只有一个
  4. ConditionalOnClass:是否存在某个类
  5. ConditionalOnMissingClass:是否缺失某个类
  6. ConditionalOnExpression:指定的表达式返回的是true还是false
  7. ConditionalOnJava:判断Java版本
  8. ConditionalOnJndi:JNDI指定的资源是否存在
  9. ConditionalOnWebApplication:当前应用是一个Web应用
  10. ConditionalOnNotWebApplication:当前应用不是一个Web应用
  11. ConditionalOnProperty:Environment中是否存在某个属性
  12. ConditionalOnResource:指定的资源是否存在
  13. ConditionalOnWarDeployment:当前项目是不是以War包部署的方式运行
  14. ConditionalOnCloudPlatform:是不是在某个云平台上

也可以利用@Conditional来自定义条件注解。

public class KkCondition implements Condition {

    @Override
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        return false;
    }
}

@Conditional(value = {KkCondition.class})
@Bean
public User user() {
    return new User();
}


引入starter开启自动配置

例如引入spring-boot-starter-web依赖, 会自动解析Tomcat配置类, 利用条件注解实现

    @Configuration
    @ConditionalOnClass({Servlet.class, Tomcat.class, UpgradeProtocol.class})
    @ConditionalOnMissingBean(
        value = {ServletWebServerFactory.class},
        search = SearchStrategy.CURRENT
    )
    public static class EmbeddedTomcat {
        public EmbeddedTomcat() {
        }

        @Bean
        public TomcatServletWebServerFactory tomcatServletWebServerFactory() {
            return new TomcatServletWebServerFactory();
        }
    }

你可能感兴趣的:(springboot)