摄影工作室网站建设模板,太原有几个区,北京网络营销推广怎么做,微信商城如何开通文章目录一、自动装配的核心触发点#xff1a;SpringBootApplication二、EnableAutoConfiguration的作用#xff1a;导入自动配置类三、自动配置类的加载#xff1a;SpringFactoriesLoader四、自动配置类的条件筛选#xff1a;Conditional注解五、自动配置的完整流程六、自…
文章目录一、自动装配的核心触发点SpringBootApplication二、EnableAutoConfiguration的作用导入自动配置类三、自动配置类的加载SpringFactoriesLoader四、自动配置类的条件筛选Conditional注解五、自动配置的完整流程六、自定义自动配置扩展总结Spring Boot的自动装配Auto-configuration 是其核心特性之一它通过约定大于配置的思想自动完成Spring应用的初始化和组件配置大幅简化了传统Spring应用中繁琐的XML或JavaConfig配置。其核心原理可概括为通过注解触发自动配置逻辑扫描并加载预设的配置类结合条件判断动态注册Bean到Spring容器。 一、自动装配的核心触发点SpringBootApplication Spring Boot应用的启动类通常标注SpringBootApplication注解这个注解是自动装配的“总开关”它是一个复合注解包含三个关键注解 SpringBootConfiguration // 等同于Configuration标记当前类为配置类
ComponentScan // 扫描当前包及子包下的Component等注解注册Bean
EnableAutoConfiguration // 核心开启自动装配机制
public interface SpringBootApplication { ... }其中EnableAutoConfiguration是触发自动装配的核心注解。 二、EnableAutoConfiguration的作用导入自动配置类 EnableAutoConfiguration的核心功能是导入预设的自动配置类其底层通过Import(AutoConfigurationImportSelector.class)实现 Import(AutoConfigurationImportSelector.class) // 导入自动配置选择器
public interface EnableAutoConfiguration { ... }AutoConfigurationImportSelector是自动装配的“大脑”它的主要作用是从类路径中加载并筛选出符合条件的自动配置类并将这些类导入到Spring容器中。 三、自动配置类的加载SpringFactoriesLoader AutoConfigurationImportSelector通过SpringFactoriesLoader工具类读取类路径下的META-INF/spring.factoriesSpring Boot 2.7 改为META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件该文件中定义了所有候选的自动配置类全路径。 例如spring-boot-autoconfigure包中的该文件会包含 # Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration\
org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
...这些类如DataSourceAutoConfiguration、DispatcherServletAutoConfiguration就是Spring Boot预定义的自动配置类分别对应数据源、Web容器等组件的自动配置。 四、自动配置类的条件筛选Conditional注解 加载的候选自动配置类并非全部生效而是通过条件注解Conditional系列 动态判断是否需要生效避免不必要的Bean注册。常见的条件注解包括 注解作用示例场景ConditionalOnClass当类路径中存在指定类时生效只有存在DispatcherServlet类时WebMvc自动配置才生效ConditionalOnMissingClass当类路径中不存在指定类时生效若未引入Redis依赖Redis自动配置不生效ConditionalOnBean当容器中存在指定Bean时生效若已手动定义DataSource数据源自动配置不生效ConditionalOnMissingBean当容器中不存在指定Bean时生效若未手动定义RestTemplate自动配置默认的RestTemplateConditionalOnProperty当配置文件中存在指定属性时生效通过spring.datasource.enabledtrue控制数据源配置是否生效ConditionalOnWebApplication当应用是Web应用时生效WebMvc自动配置仅在Web环境下生效例如DataSourceAutoConfiguration数据源自动配置类的部分代码 Configuration
ConditionalOnClass({DataSource.class, EmbeddedDatabaseType.class}) // 存在数据源相关类时生效
ConditionalOnMissingBean(type io.r2dbc.spi.ConnectionFactory) // 不存在R2DBC连接工厂时生效
EnableConfigurationProperties(DataSourceProperties.class) // 绑定配置文件属性
public class DataSourceAutoConfiguration { ... }只有满足所有条件该自动配置类才会被Spring容器加载进而注册数据源相关的Bean如DataSource、DataSourceProperties等。 五、自动配置的完整流程 启动触发应用启动时SpringBootApplication中的EnableAutoConfiguration生效触发AutoConfigurationImportSelector。加载候选配置类AutoConfigurationImportSelector通过SpringFactoriesLoader读取META-INF/spring.factories或新版的imports文件获取所有候选自动配置类。条件筛选根据自动配置类上的Conditional注解过滤掉不满足条件的配置类。注册Bean剩余的自动配置类被Spring容器解析其内部定义的Bean如Bean注解的方法被注册到容器中。配置绑定通过EnableConfigurationProperties将配置文件application.properties/yaml中的属性绑定到对应的配置类如DataSourceProperties绑定spring.datasource.*属性实现配置动态化。 六、自定义自动配置扩展 若需为自定义组件实现自动装配可按以下步骤 创建自动配置类定义一个标注Configuration的类使用Conditional注解控制生效条件通过Bean注册组件。绑定配置属性通过ConfigurationProperties定义配置类绑定应用配置文件中的属性。注册自动配置类在项目的META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中添加自定义自动配置类的全路径。 总结 Spring Boot自动装配的核心原理是通过EnableAutoConfiguration触发借助AutoConfigurationImportSelector加载预设的自动配置类结合Conditional条件注解动态筛选最终将符合条件的Bean注册到Spring容器。这一机制实现了“约定大于配置”大幅简化了Spring应用的初始化流程同时保留了通过自定义配置覆盖默认行为的灵活性。