(Java面试常问)springboot自动装配

前言

什么叫springboot的自动装配;自动装配有什么作用;
个人理解:自动装配主要指自动装配bean,没用springboot之前我们会用很多xml,在xml里定义很多bean,这样就显得很繁琐。用了springboot之后,我们则是需要用什么组件,只需要把他的pom坐标加入pom文件,maven会自动下载对应的jar,我们就可以直接使用对应的bean对象了。至此,我们没有自己去手动装配bean,却可以直接使用;那么问题来了,springboot底部是怎么把这些bean加入到spring容器中的呢?

加载bean

首先,我们来看springboot中启动类上的注解@SpringBootApplication注解,该注解是一个组合注解。由三部分组成:
@SpringBootConfigruation 标注在某个类上,表示这是一个springboot的配置类。
@ComponentScan扫描包,相当于在spring.xml 配置中context:comonent-scan 但是并没有指定basepackage,如果没有,指定spring底层会自动扫描当前配置类所有在的包
@EnableAutoConfiguration注解实现,很明显该注解就是实现自动装配的。该注解里的@Import注解,可以实现导入bean,之后通过DefferedImportSelector(延迟加载,分组)该类批量导入bean。

springboot在启动时会先创建SpringApplication对象,该对象初始化时即会加载整个应用的spring.factories文件,然后将文件的内容放到cache中,方便后续获取。
在这里插入图片描述在这里插入图片描述
(Java面试常问)springboot自动装配_第1张图片
在这里插入图片描述

使bean生效

加载成功之后会进行一个判断,如果该类在类路径上存在,则利用反射的机制实例化该bean。之后会进行过滤,@ConditionOnxxx注解用来指定自动配置类在哪些条件下会生效。我们要使用哪些类,就直接在spring boot项目中的pom.xml文件中导入相应的启动器即可,这样spring boot就会利用@ConditionOnxxx注解使我们需要的自动配置类生效,根据我们pom导入的依赖来确定哪些是我们需要的bean,将其加载到容器中。
(spring.factories文件主要是我们在引入第三方依赖的jar包带入的配置文件。文件格式为key-value格式。文件内容即为我们需要装配的class类的全路径类名。)
(Java面试常问)springboot自动装配_第2张图片

自动装配源码详细过程:https://www.processon.com/view/link/5fc0abf67d9c082f447ce49b

总结

没有springboot之前我们需要配置好多xml,里边可能涉及好多bean,eg:sqlSessionFactory。有了springboot,当他启动时,它默认会将好多常用的bean加载进来,大约100多个,但这些bean不是全部都生效的,还需要看我们pom的依赖,结合@ConditionOnxxx注解,方能使我们所需要的bean生效。加载到spring容器中。**
参考:https://www.processon.com/view/link/605b4b9de401fd4c03961a84

你可能感兴趣的