SpringBoot源码学习
1.SpringBoot框架简介
SpringBoot框架采用约定大于配置的思想对应用程序进行默认配置,减少了大量的配置时间。
当需要创建一个新的web应用,通过SpringBoot框架会变得非常容易,而且创建出的web应用不再需要各自繁琐的配置,只需要简单的几个步骤就可以创建出一个 Web应用并且可以根据需求的端口直接启动。
SpringBoot框架是如何做到这些的呢?
答案是自动装配原理。通过这个神奇的自动装配,SpingBoot框架为我们配置好了一系列我们需要的配置,并且附了默认值,当你需要自定义这些默认值时,只要在application.yml配置文件中进行修改就能达成目的。
2.SpringBoot框架自动装配原理源码探析
首先我们从启动类上面的@SpringBootApplication注解开始探析。
@SpringBootApplication注解是由许多注解组成的,当你一直点进去会发现他其实是spring的一个配置类@Configuration,继续点进去后又会发现@Component注解,原来他将自己注册成了spring的一个组件。
而在@SpringBootApplication注解点进行进行探析的时候我们会看到@EnableAutoConfiguration这个注解,他就是我们说的自动装配注解,通过他我们实现了自动装配和加载默认值等操作。
现在我们继续对@EnableAutoConfiguration进行探析,点进去后我们发现他导入了一个类@Import({AutoConfigurationImportSelector.class})
我们继续点击这个导入的类,从名字看应该导入默认的一些配置,在进入这个类后,我们发现getAutoConfigurationEntry(...)方法,继续点进去发现了一个这样的方法getCandidateConfigurations(...),我们好像看到了一个配置文件,接着一层层点进去验证,我们发现真的是指向这个文件:
META-INF/spring.factories
点进去发现了大量的XXXAutoConfiguration的配置类
然后我们发现,方法中加载这些配置后会将他们封装成一个一个properties文件,点开这些properties文件我们发现了需要默认的配置属性和默认的配置值,至此我们发现原来默认配置和默认值就这样加上了。
while(urls.hasMoreElements()) {
URL url = (URL)urls.nextElement();
UrlResource resource = new UrlResource(url);
Properties properties = PropertiesLoaderUtils.loadProperties(resource);
Iterator var6 = properties.entrySet().iterator();
但是我们又发现,配置文件中很多自动配置类是没有实现的,继续探索我们可以知道@ConditionalOnXXX这一类注解,结合我们的pom文件中添加的各类启动器和创建项目时选择的配置项等条件,自动判断了哪些应该自动装配哪些不用去加载自动装配。
而XXXProperties绑定application.yml中配置的前缀prefix,给容器中自动配置类添加组件的时候,会获取yml中设置的值,以此改变自动装配类中的默认配置,这样就实现了自动装配设置和默认值设置,并且通过配置文件自定义配置值,以此去改变这些默认配置的值实现个性化的自定义的操作。
- 点赞
- 收藏
- 关注作者
评论(0)