Spring Boot自动装配原理

一、核心入口:@SpringBootApplication 注解

Spring Boot 应用的主类通常会添加 @SpringBootApplication 注解,它是一个组合注解,主要包含以下三个关键注解:

  • @SpringBootConfiguration:继承自 @Configuration,表明该类是一个配置类,可用于定义 Bean 等配置信息。
  • @EnableAutoConfiguration:此注解是开启自动装配功能的核心,它借助 @Import 导入了 AutoConfigurationImportSelector 类,为后续自动装配流程奠定基础。
  • @ComponentScan:负责扫描指定包及其子包下带有 @Component@Service@Repository@Controller 等注解的组件,并将它们注册到 Spring 容器中。

二、自动配置类的加载:AutoConfigurationImportSelector

@EnableAutoConfiguration 注解导入的 AutoConfigurationImportSelector 类发挥着重要作用,其核心功能如下:

  • 读取 spring.factories 文件:该类会从 META - INF/spring.factories 文件中读取自动配置类的全限定名。众多 Spring Boot 依赖模块都可在自身的 spring.factories 文件中定义自动配置类。例如,spring - boot - starter - web 依赖会定义与 Web 开发相关的自动配置类,像 WebMvcAutoConfiguration 等。
  • spring.factories 文件格式:这是一个 properties 格式的文件,以 org.springframework.boot.autoconfigure.EnableAutoConfiguration 作为键,值为逗号分隔的自动配置类全限定名列表。示例如下:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

三、条件筛选:@Conditional 注解及其派生注解

为了确保自动配置类在合适的条件下生效,Spring Boot 自动配置类上广泛使用了各种 @Conditional 注解的派生注解,常见的有:

  • @ConditionalOnClass:当类路径中存在指定的类时,对应的自动配置类才会被应用。例如,WebMvcAutoConfiguration 类上标注了 @ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class }),意味着只有当类路径中同时存在 ServletDispatcherServletWebMvcConfigurer 类时,该自动配置类才会生效。
  • @ConditionalOnMissingBean:若 Spring 容器中不存在指定类型的 Bean,相应的自动配置类才会被应用。比如在数据源的自动配置类中,会检查容器中是否已存在 DataSource 类型的 Bean,若不存在则进行自动配置。
  • @ConditionalOnProperty:当指定的属性存在且满足特定条件时,自动配置类才会生效。例如,@ConditionalOnProperty(name = "spring.cache.type", havingValue = "redis") 表示只有当配置文件中存在 spring.cache.type 属性且其值为 redis 时,相关的 Redis 缓存自动配置类才会生效。

四、自动配置类的作用

自动配置类的主要职责是通过 @Bean 注解定义方法,将一些常用的组件(如 DataSourceJdbcTemplateRestTemplate 等)配置到 Spring 容器中。开发者可根据自身需求,对这些自动配置的 Bean 进行覆盖或自定义配置。例如,DataSourceAutoConfiguration 类会依据不同的数据库连接池依赖(如 HikariCP、Tomcat JDBC 等),自动配置 DataSource Bean 并注册到 Spring 容器中,供其他组件使用。

五、总结

Spring Boot 的自动装配原理是通过 @EnableAutoConfiguration 注解触发从 spring.factories 文件加载自动配置类,再利用各种条件注解决定自动配置类是否生效,最终将常用组件配置到 Spring 容器中,从而实现应用的快速搭建和自动配置。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值