安蓉建设总公司网站,网站备案制度,荣泰建设集团网站,如何上传网页到网站文章目录 Springboot的自动配置原理?1. Spring Boot Starter 依赖2.SpringBootApplication注解3.自动触发配置4.Auto-configuration Classes5.条件注解6. 外部配置文件7. 优先级和排除总结 Springboot的自动配置原理?
1. Spring Boot Starter 依赖
Spring Boot 提供了各种 … 文章目录 Springboot的自动配置原理?1. Spring Boot Starter 依赖2.SpringBootApplication注解3.自动触发配置4.Auto-configuration Classes5.条件注解6. 外部配置文件7. 优先级和排除总结 Springboot的自动配置原理?
1. Spring Boot Starter 依赖
Spring Boot 提供了各种 starter 依赖例如 spring-boot-starter-web、spring-boot-starter-data-jpa 等。引入这些 starter 依赖会自动包含一系列相关的库和配置从而简化了项目的依赖管理。
2.SpringBootApplication注解
SpringBootApplication 注解是一个组合注解包括三个注解
SpringBootConfiguration标识该类是一个Spring配置类。EnableAutoConfiguration启用Spring Boot的自动配置机制。ComponentScan启用组件扫描自动发现并注册Spring组件。
SpringBootApplication
public class MySpringBootApplication {public static void main(String[] args) {SpringApplication.run(MySpringBootApplication.class, args);}
}
3.自动触发配置
EnableAutoConfiguration 注解会触发自动配置机制。Spring Boot 在启动时会根据类路径中的依赖和各种条件自动配置 Spring 应用。
EnableAutoConfiguration 注解的定义
Target(ElementType.TYPE)
Retention(RetentionPolicy.RUNTIME)
Documented
Inherited
AutoConfigurationPackage
Import(AutoConfigurationImportSelector.class)
public interface EnableAutoConfiguration {Class?[] exclude() default {};String[] excludeName() default {};
}
这个注解包含以下几个重要部分
AutoConfigurationPackage 自动配置包标注此注解的类所在包及其子包会被扫描自动注册为 Spring 的 Bean。 该注解的作用类似于 ComponentScan。Import(AutoConfigurationImportSelector.class) 导入 AutoConfigurationImportSelector自动配置选择器这个类负责加载并注册所有符合条件的自动配置类。
4.Auto-configuration Classes
Spring Boot 通过扫描 META-INF/spring.factories 文件查找 org.springframework.boot.autoconfigure.EnableAutoConfiguration 属性列出的所有自动配置类。这些自动配置类包含了一系列用 Configuration 注解标注的类这些类定义了应用所需的各种 bean。
# META-INF/spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,\
...
5.条件注解
自动配置类通常使用条件注解如 ConditionalOnClass、ConditionalOnMissingBean、ConditionalOnProperty 等来决定是否加载特定的配置。这些注解确保了只有在满足特定条件时才会创建相关的 bean。
Configuration
ConditionalOnClass(DataSource.class)
EnableConfigurationProperties(DataSourceProperties.class)
public class DataSourceAutoConfiguration {BeanConditionalOnMissingBeanpublic DataSource dataSource(DataSourceProperties properties) {return new HikariDataSource(properties);}
} eg:ConditionalOnClass: 只有在特定的类存在时才会加载配置。 ConditionalOnMissingBean: 只有在容器中没有特定的bean时才会加载配置。 ConditionalOnProperty: 只有在配置文件中存在特定属性时才会加载配置。 6. 外部配置文件
外部配置文件Spring Boot 支持多种外部配置方式如 application.properties 或 application.yml。这些配置文件可以覆盖默认的自动配置。例如可以在 application.properties 文件中配置数据库连接信息
spring.datasource.urljdbc:mysql://localhost:3306/mydb
spring.datasource.usernameroot
spring.datasource.passwordsecret
7. 优先级和排除
优先级和排除
优先级Spring Boot 自动配置的 bean 定义在默认配置中具有较低优先级允许用户自定义配置覆盖自动配置。排除自动配置可以使用 SpringBootApplication 注解的 exclude 属性或 EnableAutoConfiguration 注解的 exclude 属性排除不需要的自动配置类。
SpringBootApplication(exclude {DataSourceAutoConfiguration.class})
public class MySpringBootApplication {public static void main(String[] args) {SpringApplication.run(MySpringBootApplication.class, args);}
}
总结
Spring Boot的自动配置原理是通过EnableAutoConfiguration注解引入自动配置逻辑然后解析Import注解加载各种配置类包括deferredlmportSelector和自动配置类。通过SPI机制读取spring.factories文件。过滤出自动配置类并根据条件化配置来动态加载这些类从而实现自动配置故功能。这种机制使得Spring Boot应用程序可以根据环境和需求自动配置极大地简化了开发和部署的工作。 DeferredImportSelector 是 Spring Framework 中的一个接口继承自ImportSelectorDeferredImportSelector 提供了一种机制可以在所有配置类加载完成后再根据某些条件动态决定需要导入哪些配置类。