文章目录
一、核心入口:@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 }),意味着只有当类路径中同时存在Servlet、DispatcherServlet和WebMvcConfigurer类时,该自动配置类才会生效。@ConditionalOnMissingBean:若 Spring 容器中不存在指定类型的 Bean,相应的自动配置类才会被应用。比如在数据源的自动配置类中,会检查容器中是否已存在DataSource类型的 Bean,若不存在则进行自动配置。@ConditionalOnProperty:当指定的属性存在且满足特定条件时,自动配置类才会生效。例如,@ConditionalOnProperty(name = "spring.cache.type", havingValue = "redis")表示只有当配置文件中存在spring.cache.type属性且其值为redis时,相关的 Redis 缓存自动配置类才会生效。
四、自动配置类的作用
自动配置类的主要职责是通过 @Bean 注解定义方法,将一些常用的组件(如 DataSource、JdbcTemplate、RestTemplate 等)配置到 Spring 容器中。开发者可根据自身需求,对这些自动配置的 Bean 进行覆盖或自定义配置。例如,DataSourceAutoConfiguration 类会依据不同的数据库连接池依赖(如 HikariCP、Tomcat JDBC 等),自动配置 DataSource Bean 并注册到 Spring 容器中,供其他组件使用。
五、总结
Spring Boot 的自动装配原理是通过 @EnableAutoConfiguration 注解触发从 spring.factories 文件加载自动配置类,再利用各种条件注解决定自动配置类是否生效,最终将常用组件配置到 Spring 容器中,从而实现应用的快速搭建和自动配置。
1154

被折叠的 条评论
为什么被折叠?



