【SpringBoot】SpringBoot自动装配源码分析

SpringBoot如何实现的自动装配

1. 基本描述

SpringBoot的最主要的功能就是自动装配功能。通过自动配置,SpringBoot大大减少了使用java框架的复杂程度,并且可以统一的将配置文件写入application.yml中。并且,SpringBoot为常见的应用提供了一套默认的配置,使得使用者无需编写重复的配置代码,可以专心于业务的实现。

第三方框架和其他的Spring组件只要使用Spring提供的SPI规范,就可以通过编写starter的方式被通过SpringBoot的方式组合到SpringBoot中。

SpringBoot首先会从配置文件中读取所有的自动配置类,这些配置类我们称为待选配置类。然后通过筛选,仅注入项目所需要的配置类,这些配置类被注册后就会生效,为我们的项目提供自动配置功能。

2. 原理和实现
2.1 配置的读取和筛选

SpringBoot实现自动装配的主要实现是依靠@EnableAutoConfiguration注解实现的,这个注解被包含在了Spring的入口注解@SpringBootApplication中

@SpringBootApplication

    @SpringBootConfiguration
    @EnableAutoConfiguration
    @ComponentScan(
        excludeFilters = {
   
   @Filter(
        type = FilterType.CUSTOM,
        classes = {
   
   TypeExcludeFilter.class}
    ), @Filter(
        type = FilterType.CUSTOM,
        classes = {
   
   AutoConfigurationExcludeFilter.class}
    )}

SpringBootApplication注解包括三个重要的子注解

  1. @SpringBootConfiguration 是一个对 @Configuration 的包装,其加入了一个 @Index 注解作为对SpringBoot应用加速的注解。
  2. @ComponentScan注解是SpringBoot的组件扫描注解。
  3. 主要实现自动配置的注解是 @EnableAutoConfiguration注解

@EnableAutoConfiguration注解的实现如下:

@AutoConfigurationPackage
@Import({
   
   AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
   
   
    String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";

    Class<?>[] exclude() default {
   
   };

    String[] excludeName() default {
   
   };
}

可以看到,在这里SpringBoot引用了AutoConfigurationImportSelector类,这个类继承了ImportSelector接口,这个接口提供一个方法,可以在获取到IOC容器中的Bean的元信息之后,来判断是否将Bean注入IOC容器。这个方法就是selectImports方法。参数为AnnotationMeataInfo注解元信息。

    public String[] selectImports(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值