SpringBoot源码之自动装配原理

1、@SpringBootApplication

我们经常见到的的注解@SpringBootApplication
配置在类上方SpringBoot就会运行这个类的main方法来启动SpringBoot项目。

点进去看,发现他是一个组合的注解,他是这样的:
在这里插入图片描述
其中@SpringBootConfiguration注解又包含了@Configuration注解,@Configuration注解又包含了@Component注解。我们使用Spring经常用的注解便是@Component,表明该类是一个Spring的配置类。受Spring容器管理生命周期。

SpringBoot自动装配用到的主要的注解便是@EnableAutoConfiguration
他长这个样子:
在这里插入图片描述

2、@AutoConfigurationPackage

我们首先来看@AutoConfigurationPackage
在这里插入图片描述
很明显,他导入了一个名字叫Resistrar的配置类,通过源码发现他只是注册了主配置类所在的包AutoConfigurationPackages到容器当中。
在这里插入图片描述

3、@Import({EnableAutoConfigurationImportSelector.class})

因此,springboot自动配置的核心注解便是@Import({EnableAutoConfigurationImportSelector.class}),进入EnableAutoConfigurationImportSelector.class,发现他继承了AutoConfigurationImportSelector,入
在这里插入图片描述
主要的方法是selectImports,他返回一个字符串数组,正好有一行代码返回一个字符串的List,调用了getCandidateConfigurations的方法:
在这里插入图片描述
getCandidateConfigurations长这样:
在这里插入图片描述
调用了loadFactoryNames方法,方法实现如下,他去从META-INF/spring.factories下获取资源,并且全部加载进来:
在这里插入图片描述
META-INF/spring.factories中的内容为大概长这个样子:

在这里插入图片描述
loadFactoryNames方法中的关键代码为properties.getProperty(factoryClassName);
在这里插入图片描述
使用了Properties中的getProperty方法

getProperty(String key) : 在此属性列表中搜索具有指定键的属性。如果在此属性列表中找不到该键,则会检查默认属性列表及其默认值(递归)。如果未找到该属性,则该方法返回默认值参数。

他会过滤键为org.springframework.boot.autoconfigure.EnableAutoConfiguration类名的配置属性。到了这里便真相大白了。

4、总结

SpringBoot相当于使用了一种协议,他会默认寻找META-INF/spring.factories文件,并过滤键为org.springframework.boot.autoconfigure.EnableAutoConfiguration的属性值,并将值中的所有类自动装载。如果想要使用SpringBoot的自动装载功能,便需在META-INF/spring.factories文件中添加org.springframework.boot.autoconfigure.EnableAutoConfiguration的键,然后将需要自动装配的类作为值写进去。springboot便会将类进行自动装配。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值