Spring Boot 自动装配

155 阅读2分钟

说一下 Spring Boot 自动装配原理呗?

Spring Boot自动装配是基于Spring框架的自动化配置机制,旨在简化开发人员的配置工作并提高开发效率。它通过条件化配置和约定大于配置的原则来实现。

Spring Boot自动装配的原理如下:

  1. 组件扫描:Spring Boot会自动扫描项目中的类,查找带有特定注解的类(例如@Component@Service@Repository等)。
  2. 条件化配置:Spring Boot使用条件化配置来决定是否装配某个Bean。条件是通过实现Condition接口或使用@Conditional注解来定义的。根据条件的结果,Spring Boot会决定是否创建该Bean。
  3. 自动配置:Spring Boot提供了许多自动配置类,这些类使用条件化配置来根据应用程序的依赖和环境自动配置Spring应用程序上下文中的Bean。自动配置类通常以AutoConfiguration结尾,并通过@EnableAutoConfiguration注解启用。
  4. 配置文件加载:Spring Boot会自动加载应用程序配置文件(例如application.propertiesapplication.yml),并将其属性值注入到相应的Bean中。
  5. SpringApplication启动:Spring Boot使用SpringApplication类来启动应用程序。它会扫描主类所在的包以及子包,并根据类路径、配置文件和自动配置来创建Spring应用程序上下文。
  6. 自动装配顺序:Spring Boot根据自动配置类的顺序来决定装配Bean的顺序。在多个自动配置类中存在相同类型的Bean时,后加载的自动配置类会覆盖之前加载的。

我们现在提到自动装配的时候,一般会和 Spring Boot 联系在一起。但是,实际上 Spring Framework 早就实现了这个功能。Spring Boot 只是在其基础上,通过 SPI 的方式,做了进一步优化。

SpringBoot 定义了一套接口规范,这套规范规定:SpringBoot 在启动时会扫描外部引用 jar 包中的META-INF/spring.factories文件,将文件中配置的类型信息加载到 Spring 容器(此处涉及到 JVM 类加载机制与 Spring 的容器知识),并执行类中定义的各种操作。对于外部 jar 来说,只需要按照 SpringBoot 定义的标准,就能将自己的功能装置进 SpringBoot。

自动装配可以简单理解为:通过注解或者一些简单的配置就能在 Spring Boot 的帮助下实现某块功能。

SpringBoot 是如何实现自动装配的?

  • @EnableAutoConfiguration:启用 SpringBoot 的自动配置机制

  • @Configuration:允许在上下文中注册额外的 bean 或导入其他配置类

  • @ComponentScan: 扫描被@Component (@Service,@Controller)注解的 bean,注解默认会扫描启动类所在的包下所有的类 ,可以自定义不扫描某些 bean。容器中将排除TypeExcludeFilterAutoConfigurationExcludeFilter

  • @EnableAutoConfiguration 是实现自动装配的重要注解。