-
首先我们不论是在面试的时候,还是自己最初实际使用springboot的时候肯定会有这样的疑问,springboot的全注解配置,简化掉的原来的那些springboot的繁琐的配置文件都去哪里了,原来的那些配置文件都是怎么加载进容器的?
-
要了解这个过程,我们可以从最简单的实际应用出发,假如我们自己写一个配置文件,要怎么让springboot把文件属性加载进容器供我们调用呢?通用的两种方法,都是使用注解进行配置文件属性的获取,哪两个注解呢?就是我们很熟悉的@Value和@PropertiesConfig,相信这两个注解大家都不陌生,基本每个项目都会用到,@Value通常作用在字段上,通过el表达式直接获取配置文件的属性,而@PropertiesConfig通常注解在类上,通过el表达式和字段值获取属性,需要注意@PropertiesConfig需要把类的字段名称和配置文件需要获取的属性名称相对应,才会自动赋值到字段上,这是和@Value用法不同的一点,@Value对字段值没有要求,因为你的位置已经全部写在了@Value的EL表达式上,另外如果是自定义的配置文件不是系统默认的application.yml或者application.xml,那么你还需要在相关读取配置的类上通过@PropertiesSource标注配置文件名称,当然我们还需要用@component把类实例化到容器,供我们获取属性。
-
ok那么回顾完了我们日常的一些用法之后,再来进一步的了解springboot的自动装配原理,首先我们还是从最核心的注解@SpringbootApplciation入手,这是一个复合注解,里面就包含了自动装配的注解@EnableAutoConfiguration,当然其他的组件扫描等注解我们在这里不讨论,接下来再次进入@EnableAutoConfiguration,果然这还是一个复合注解,最关键的要属@Import(EnableAutoConfigurationImportSelector.class),借助EnableAutoConfigurationImportSelector,@EnableAutoConfiguration可以帮助SpringBoot应用将所有符合条件的@Configuration配置都加载到当前SpringBoot创建并使用的IoC容器。具体来讲就是EnableAutoConfigurationImportSelector这个类有一个方法,可以读取autoconfig
jar包里的spring.factory文件,这个文件里面包括了自动装配的配置类,类似如XXXconfig.class,这些形形色色的配置文件对应着自动装配的各个内容,什么缓存啊,事务管理啊,都会有默认的配置类,在这些配置类有一个需要注意的注解,就是@EnablePropertiesConfig,通过这个注解配置类把配置文件实体类注入容器,@EnablePropertiesConfig会标注一个配置文件属性的对应实体类,把配置文件的属性值映射到具体的实体类字段上,当然也是用的之前我们说过的@PropertiesConfig来进行的。 -
回顾一下上面的自动装配的流程,@SpringbootApplciation复合注解包含了自动装配的核心注解@EnableAutoConfiguration,而在@EnableAutoConfiguration中有一个导入的注解@Import(EnableAutoConfigurationImportSelector.class),通过这个类的方法读取自动装配jar包的spring.factory,里面就是形形色色的配置类了,这些配置类统一通过@EnablePropertiesConfig把配置文件的属性实体类注入到容器,配置文件的属性实体类就和平常我们读取自定义配置文件的方式一样,通过@PropertiesConfig进行属性映射,把配置文件的属性值映射到实体类的字段上,再把实体类注入到容器。
以上就是自动装配的基本流程,感兴趣的同学可以通过注解一步步查看源码进行深入的了解,想速成的通过这篇文章也足够应付面试官了,以上内容纯手打,有错误的地方欢迎大家交流指正。
通俗易懂,五分钟掌握springboot自动装配原理
最新推荐文章于 2024-09-22 13:04:35 发布