SpringBoot 自动装配原理

SpringBoot 自动装配原理

@SpringBootApplication  注解点进去如下:

 @SpringBootApplication  有3个重要的注解分别是 

@SpringBootConfiguration   就是一个配置类
@EnableAutoConfiguration
@ComponentScan

@SpringBootConfiguration

@Configuration    

@EnableAutoConfiguration

 @AutoConfigurationPackage

@Import(AutoConfigurationImportSelector.class)

getCandidateConfigurations


@SpringBootConfiguration

要想当前程序可以申明成自动注入装配的。我们一般可以在类上添加  @Component ,但是这个 @SpringBootConfiguration 里并没有看到。点击 Configuration 进入

@Configuration    

 

 点击 @Configuration  进入,可以看到 Configuration  上已经有了 @Component 的注解了。注解有继承关系。SpringBootConfiguration也会有该功能

@EnableAutoConfiguration

 EnableAutoConfiguration 中有两个重要的注解分别是  @AutoConfigurationPackage、@Import(AutoConfigurationImportSelector.class)

 @AutoConfigurationPackage

 AutoConfigurationPackage 再点进去看,有一个@Import(AutoConfigurationPackages.Registrar.class),返回一个 Registrar 方法如下

@Import(AutoConfigurationImportSelector.class)

进入 AutoConfigurationImportSelector.class 类中,有一个方法  getCandidateConfigurations 。这个方法就是获取 spring.factories 配置文件中的Key,Value  属性值。那么这个Key就是  this.getSpringFactoriesLoaderFactoryClass() 方法返回的值  EnableAutoConfiguration

getCandidateConfigurations()

 protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
        List<String> configurations = SpringFactoriesLoader.loadFactoryNames(
                                            this.getSpringFactoriesLoaderFactoryClass(), 
                                            this.getBeanClassLoader());
        Assert.notEmpty(configurations, 
"No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.");
        return configurations;
    }

this.getSpringFactoriesLoaderFactoryClass()  

        返回值为  EnableAutoConfiguration

 

到 SpringBoot-autoconfigure 中查看 spring.factories 文件,可以看到其中一对的 K , V属性值,找到 EnableAutoConfiguration 这个key 属性,可以看到很多属性

  spring.factories 文件

断点调试 getCandidateConfigurations()
看到 List<String> configurations 中的值和 spring.factories 文件 中一致的

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值