SpringBoot自动装配原理
什么是SpringBoot自动装配
SpringBoot自动装配(Auto Configuration)就是SpringBoot将我们添加在项目中的依赖和配置自动加载并配置到Spring应用程序中。这也是SpringBoot的最重要的特性,简化Spring项目的手动配置,从而快速启动程序。
SpringBoot的执行流程(原理)
Spring Boot的自动装配流程基于其核心注解和一系列配置机制,以下是对其工作流程的详细解析:
-
启动注解:
Spring Boot的自动装配始于@SpringBootApplication注解。这个注解实际上是@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan三个注解的组合。
-
SpringBoot应用程序启动类源码如下:
@SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
-
@SpringBoot注解源码如下:
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan public @interface SpringBootApplication { }
-
-
@SpringBootConfiguration:
@SpringBootConfiguration注解本质上是一个@Configuration注解的包装,用于声明当前类是一个配置类,可以定义Bean,也可以引入其他配置类。
-
@EnableAutoConfiguration:
这是实现自动装配的关键注解。它包含了@AutoConfigurationPackage和@Import(AutoConfigurationImportSelector.class)两个子注解。
-
@AutoConfigurationPackage:用于自动配置包,使得主配置类(带有@SpringBootApplication注解的类)所在的包及其子包中的组件都能被Spring容器扫描到。
-
@Import(AutoConfigurationImportSelector.class):这个注解的作用是导入类,但在这里它并不是直接导入一个普通的类,而是导入了一个实现了ImportSelector接口的类AutoConfigurationImportSelector。这个类的作用是根据一定的规则(比如类路径下的META-INF/spring.factories文件)来加载并配置一些自动装配的类。
-
-
META-INF/spring.factories:
在Spring Boot的自动装配过程中,META-INF/spring.factories文件起到了非常关键的作用。这个文件是Spring Boot用来加载自动配置类的一个约定俗成的文件,它位于各个Spring Boot Starter的jar包中。Spring Boot在启动时,会扫描所有jar包中的META-INF/spring.factories文件,并将其中配置的自动配置类加载到Spring容器中。
-
自动配置类:
这些类通常是以AutoConfiguration结尾的,它们使用@Configuration注解标注,并且内部定义了一些Bean。这些Bean就是Spring Boot自动装配到Spring容器中的组件。
-
条件装配:
在自动配置类中,经常可以看到@ConditionalOnClass、@ConditionalOnProperty等条件注解。这些注解的作用是判断当前环境是否满足某个条件,如果满足则进行自动装配,否则不进行装配。这样可以根据项目的实际情况来灵活地选择需要装配的组件。
-
总结:
Spring Boot的自动装配工作流程大致可以归纳为:首先通过@SpringBootApplication注解启动Spring Boot应用,然后利用@EnableAutoConfiguration注解中的@Import(AutoConfigurationImportSelector.class)来加载META-INF/spring.factories文件中配置的自动配置类,最后根据这些自动配置类中的定义和条件注解来将相应的组件装配到Spring容器中。