SpringBoot自动配置

目录

问题

创建启动Tomcat流程

解析Tomcat配置项

解析自动配置流程

@EnableAutoConfiguration

ImportSelector和DeferredImportSelector

条件注解

引入starter开启自动配置


问题

  1. springboot整合Tomcat流程, 以及解析tomcat配置
  2. @EnableAutoConfiguration做的事情
  3. springboot解析spring.factory自动配置类
  4. springboot解析条件注解
  5. start机制原理

=========================================

创建启动Tomcat流程

解析Tomcat配置项

配置文件ServerProperties, 包含server.port和server.threads等

解析自动配置流程

@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();
        }
    }

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值