SpringBoot是如何进行自动装配的

注解装配

我们知道,当我们在启动Spring应用时,我们需要为Spring提供配置信息(XML或Configuration),这个配置文件中配置了我们的各种Bean信息
在我们自己的应用中,Spring会读取我们Resource下的xml配置文件,但是如果我们引入了别人的第三方包,Spring如何去扫描第三方包的配置文件呢?
这时候就要说到@Import注解了,它可以导入指定的配置类文件,从而实现配置文件的加载。
在这里插入图片描述
根据一个总注解实现第三方依赖的配置入口文件的导入,如上图中只要在启动类中加上@EnableScheduling即代表了引入了配置文件SchedulingConfiguration,然后一切就顺理成章了。

自动装配

在我们自己定义一个拦截器时,定义后还要将其注册到WebMvcConfig中才能使用,那第三方包如果提供了一个拦截器,一定要在自己的代码中进行硬编码式的进行注册动作吗?太麻烦了是不是?这就引入了外部配置。
对于一些通用的接口,Spring会在特定的文件中记录该接口的实现类,在Spring启动时会去读取这个文件,将对应的类进行处理。该文件就是org/springframework/boot/spring-boot/1.5.6.RELEASE/spring-boot-1.5.6.RELEASE.jar!/META-INF/spring.factories,这样,如果要实现一些通用接口,直接将类名加在这个文件中即可,Spring会自动读取并进行注册。
如下图在自己项目的resource/META-INF下注册了一个自己实现的MyListener,其是SpringApplicationRunListener的实现
同样该方案作为一种解耦的通用接口的扩展实现
在这里插入图片描述
在这里插入图片描述
SpringBoot其实就是结合了注解装配、条件装配以及工程加载(spring.factories文件的加载类SpringFactoriesLoader)实现自动装配的,大家按照约定将负责自动装配的配置类写入spring.factories,然后根据注解装配@EnableAutoConfigutarion来进行配置文件的读取,读取自动装配的配置类,从而实现自动装配
SpringBootApplication --> EnableAutoConfigutarion --> SpringFactoriesLoader加载所有自动装配配置类进行自动装配
在这里插入图片描述

发布了98 篇原创文章 · 获赞 9 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Mutou_ren/article/details/104076583