SpringBoot自动装配原理
1.Starter(依赖)
Spring Boot Starter 是 Spring Boot 提供的一种依赖管理机制,它可以帮助开发者快速集成常用的技术栈和第三方库,简化项目的配置和搭建过程,提高开发效率。Spring Boot Starter 通常包含以下两个模块:
- Starter 模块:这是一个空的 Maven 依赖项目,用于定义 Spring Boot Starter 的名称、版本和描述等信息,以及声明 Spring Boot 的自动配置模块作为依赖。
- Autoconfigure 模块:这是 Spring Boot 的自动配置模块,用于根据应用程序的依赖关系和配置情况,自动配置和装配 Spring Bean。在这个模块中,通常会定义一个带有
@Configuration
和@ConditionalOnXXX
注解的配置类,用于装配相关的 Bean,例如DataSourceAutoConfiguration
、WebMvcAutoConfiguration
等。
通过引入 Spring Boot Starter,开发者可以省去手动配置和装配各种技术栈的繁琐过程,Spring Boot 会根据应用程序的依赖关系和配置情况,自动加载相应的 Starter,并根据 Starter 中的自动配置模块自动配置和装配相关的 Bean。例如,如果在一个 Web 应用中需要使用 Thymeleaf 模板引擎,只需在 Maven 中添加以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
Spring Boot 就会自动加载 spring-boot-starter-thymeleaf
Starter,并根据 Starter 中的自动配置模块自动配置和装配 Thymeleaf 相关的 Bean,开发者只需要简单地在配置文件中配置相关的参数即可。
2.自动装配原理
Spring Boot 的自动装配(Auto Configuration)是基于 Spring 的条件化配置(Conditional Configuration)机制实现的。当应用程序启动时,Spring Boot 会根据应用程序的依赖关系和配置情况,自动配置和装配 Spring Bean,这些 Bean 可以是应用程序所需的任何组件,例如数据库连接池、消息队列、Web 容器、模板引擎等。
具体来说,Spring Boot 的自动装配是通过以下步骤实现的:
-
Spring Boot 根据应用程序的依赖关系,查找并加载所有的 Starter,每个 Starter 都包含一个或多个自动配置类(Auto Configuration)。
-
Spring Boot 根据 Starter 中的自动配置类,自动装配和配置 Spring Bean,这些 Bean 都是基于 Spring 的条件化配置机制实现的。在自动配置类中,通常会使用
@ConditionalOnXXX
注解指定一个或多个条件,只有当满足这些条件时,自动配置类才会被加载和执行。//必须加载了含有这个类的starter依赖,这个自动配置才能生效 @ConditionalOnClass({CharacterEncodingFilter.class}) @ConditionalOnProperty( prefix = "server.servlet.encoding", value = {"enabled"}, matchIfMissing = true ) public class HttpEncodingAutoConfiguration{......}
-
如果应用程序需要自定义某个组件的配置,可以在应用程序中添加一个对应的 Bean,这个 Bean 的优先级会高于自动配置类中的 Bean,从而覆盖自动配置类中的默认配置。
-
Spring Boot 还提供了一些可配置的属性(Properties),用于控制自动装配的行为。应用程序可以在配置文件中设置这些属性,来定制自己的配置需求。例如,
spring.datasource.url
属性用于设置数据源的连接 URL。
总之,Spring Boot 的自动装配是基于条件化配置机制实现的,根据你引入的依赖和配置文件中的配置信息等条件去加载配置类,自动加载Bean。