SpringBoot自动装配原理

本文详细解释了SpringBoot中@SpringBootApplication注解下的自动装配原理,重点关注@ComponentScan和@EnableAutoConfiguration,以及如何通过分析spring.factories文件实现类路径下的自动配置加载。
摘要由CSDN通过智能技术生成

        时间过的真快,一年一度的春节又过去了。上班第一天比较轻松,整理下节前看的SpringBoot自动装配原理。

        SpringBoot的核心注解大家应该都知道是@SpringBootApplication()注解,自动装配也和该注解有关。@SpringBootApplication()是一个复合注解,点进注解对应的接口类可以看见接口上面对应的注解。

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)

java原生注解这边不与讲解,主要是@ComponentScan这个注解是包扫描的注解,也就是扫描bean。与自动装配有关的注解看英文单词大家应该也可以看出来--->@EnableAutoConfiguration。

这个注解中文是开启自动配置,接下来点击进去对应的接口里面可以看出这个注解也是一个复合注解。下面是进去后接口上面的注解。

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})

这6个注解中一眼就可以看出@Import({AutoConfigurationImportSelector.class})是对应的自动装配注解,功能是导入一个类。接下来点击进入对应的类。

可以看到导入的这个类实现了DeferredImportSelector接口,接着点进去看。

显然可以看见DeferredImportSelector继承了ImportSelector接口。而ImportSelector接口中有一个selectImports方法需要去实现,这里也是关键的实现自动装配原理的方法。接下来我们返回到AutoConfigurationImportSelector类中,查看实现的ImportSelector接口中的selectImports方法。

可以看到对应的方法中进行了一个判断,重点是getAutoConfigurationEntry方法,点击进去看就可以看到又有一个获得配置的getCandidateConfigurations方法。

接下来点击进入红框的方法中可以看见下面代码。

可以很明显的看出该方法是将类路径下 META-INF/spring.factories 里面配置的所有AutoConfiguration的值获得返回。然后依次返回到容器中完成自动装配

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值