快捷搜索: 王者荣耀 脱发

面试题:SpringBoot自动装配原理

SpringBoot 的启动需要贴一个 @SpringApplication 注解,这个注解是 SpringBoot 的核心注解。

在 @SpringApplication 的源码里面,有三个关键的注解:

  1. @SpringBootConfiguration
  2. @ComponentScan
  3. @EnableAutoConfiguration

@SpringBootConfiguration:

指定该类是 SpringBoot 的配置类

@ComponentScan:

扫描该类所在的包下所有的类,把符合扫描规则的类装配到容器中

@EnableAutoConfiguration:

通俗的讲,它可以根据你在 pom.xml 添加的依赖,“推测”出你需要用什么配置,并且可以帮你配置好。举个例子,比如你添加了一个 spring-boot-starter-web 的依赖,他就“推测”出你要开发web项目,他就会帮我们把web和SpringMVC的配置帮我们配置好。

在 @EnableAutoConfigration 的源码中,贴了一个@Import注解导入了一个自动配置类选择器的字节码对象,可以批量载入到 Spring 容器中。

在这个自动配置类选择器中有一个 getCandidateConfigurations方法,他会调用SpringFactoryLoader读取jar包中的META-INF/spring.factories文件。

它的默认配置就存放在该spring.factories文件中,也可以使用我们自定义的配置。

在这些配置类中,需要根据你添加的依赖来进行加载和配置。

比如,在WebMvcAutoConfiguration自动配置类中,贴了很多条件注解,触发了某些条件,就会根据这些条件来创建对象,并交给Spring容器管理。

经验分享 程序员 微信小程序 职场和发展