Spring Boot 一些基础知识

Spring Boot 核心注解

@SpringBootApplication

启动类上面的注解是@SpringBootApplication,它也是 Spring Boot的核心注解,主要组合包含了以下3个注解:
@ SpringBootConfiguration:组合了@ Configuration注解,实现配置文件的功能
@ EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能:@ SpringBootApplication( exclude = {DataSourceAutoConfiguration.class})
@ ComponentScan: Spring组件扫描
在这里插入图片描述

@SpringBootConfiguration

在这里插入图片描述
从上述源码可以看出,@SpringBootConfiguration注解内部有一个核心注解@Configuration,该注解
是Spring框架提供的,表示当前类为一个配置类(XML配置文件的注解表现形式),并可以被组件扫描
器扫描。由此可见,@SpringBootConfiguration注解的作用与@Configuration注解相同,都是标识一
个可以被组件扫描器扫描的配置类,只不过@SpringBootConfiguration是被Spring Boot进行了重新封
装命名而已

@EnableAutoConfiguration

@AutoConfigurationPackage
// Spring的底层注解@Import,给容器中导入一个组件;
// 导入的组件是AutoConfigurationPackages.Registrar.class 
@Import(AutoConfigurationImportSelector.class)
// 告诉SpringBoot开启自动配置功能,这样自动配置才能生效。 
public @interface EnableAutoConfiguration {
    String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";

    // 返回不会被导入到 Spring 容器中的类 
    Class<?>[] exclude() default {};

    // 返回不会被导入到 Spring 容器中的类名 
    String[] excludeName() default {};
}

Spring 中有很多以 Enable 开头的注解,其作用就是借助 @Import 来收集并注册特定场景相关的
Bean ,并加载到 IOC 容器。

@EnableAutoConfiguration就是借助@Import来收集所有符合自动配置条件的bean定义,并加载到
IoC容器。

Spring Boot 自动配置原理

自动配置:根据我们添加的jar包依赖,会自动将一些配置类的bean注册进ioc容器,我们可以需要的地
方使用@autowired或者@resource等注解来使用它。
大致流程是:

  1. @EnableAutoConfiguration给容器导入META-INF/spring.factories里定义的自动配置类。
  2. 从spring.factories配置文件中加载自动配置类。
  3. 加载的自动配置类中排除掉 @EnableAutoConfiguration 注解的exclude属性指定的自动配置类。
  4. 然后再用 AutoConfigurationImportFilter接口去过滤自动配置类是否符合其标注注解(若有标注的话) @ConditionalOnClass , @ConditionalOnBean 和 @ConditionalOnWebApplication 的条件,若都符合的话则返回匹配结果。
  5. 然后触发 AutoConfigurationImportEvent 事件,告诉 ConditionEvaluationReport 条件评估报告器对象来分别记录符合条件和 exclude 的自动配置类。
  6. 最后spring再将最后筛选后的自动配置类导入IOC容器中。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值