(面试题)Springboot的自动装配原理

520 阅读1分钟

2.png

是什么:Springboot的自动装配就是在系统启动过程中,自动扫描starter里面的配置类,将其加载到我们的Spring容器中,相当于是提供了一种默认配置,达到"开箱即用"

原理:从程序入口注解反向看自动配置

点进去@SpringBootApplication发现里面三个注解

(1)首先是@SpringBootConfiguration,再点进去里面其实就是@Configuration,相当于是一个配置类注解

(2)然后是@ComponentScan,这里可以看到exclude排除了一些bean

(3)最后是重点,也就是@EnableAutoConfiguration注解,字面意思开启自动配置,当然这是一个复合注解,点进去分析里面两个注解

  • 先看里面有个@AutoConfigurationPackage注解,这个注解作用就是将启动类所在的package作为注解扫描的package,这就是为什么我们自己写的代码要放在启动类同级目录
  • 然后,最最最重要的另一个注解@Import,这个注解导入了一个类,点进去这个类查看主要逻辑,实际上就是通过SPI机制,扫描并加载META-INF/spring.factories中的配置类,这个文件中是key-value格式,key是EnableAutoConfiguration,value是类路径
 随便打开这样的一个value配置类后,比如Redis的配置类,我们会发现类上面有个@ConditionalOnMissingBean注解,
这个注解含义就是如果容器中没有该类在注入容器。这也就能说明一个平时的疑问,redis提供了一个默认的配置类的
bean。我如果自定义一个肯定会报冲突,但是实际上并没有,就是因为这个@ConditionalOnMissingBean