2026/2/14 13:33:59
网站建设
项目流程
vs做网站如何输出,百度小说排行榜总榜,品牌建设工作实施方案,做特卖网站手机版Spring Boot自动配置
一、核心思想与目标
自动配置是Spring Boot的基石#xff0c;其核心目标是#xff1a;根据项目中引入的依赖#xff08;JAR包#xff09;和预设的配置#xff0c;自动、智能地组装和配置Spring应用所需的Bean#xff0c;实现 “约定大于配置” 其核心目标是根据项目中引入的依赖JAR包和预设的配置自动、智能地组装和配置Spring应用所需的Bean实现“约定大于配置”让开发者专注于业务逻辑而非繁琐的框架配置。二、自动配置的三大核心注解自动配置的旅程始于主类上的SpringBootApplication。它是一个复合注解主要由以下三个关键注解组成注解核心职责简要说明SpringBootConfiguration标识配置类本质上是Configuration的变体表明该类是一个Spring配置类。ComponentScan组件扫描默认扫描主类所在包及其子包下的Component,Service,Repository,Controller等注解的类。EnableAutoConfiguration启用自动配置核心这是自动配置的“总开关”。它通过Import导入了一个关键的选择器类。三、自动配置的工作原理核心流程整个自动配置流程围绕EnableAutoConfiguration展开其核心是一个“发现-加载-条件装配”的过程。第1步触发与导入当应用启动时EnableAutoConfiguration注解会通过Import注解导入一个核心选择器类AutoConfigurationImportSelector。第2步加载候选配置类发现阶段AutoConfigurationImportSelector会调用SpringFactoriesLoader.loadFactoryNames()方法。这个方法会扫描所有依赖JAR包中META-INF/spring.factories这个配置文件。它查找配置文件中EnableAutoConfiguration这个Key对应的所有值。这些值就是全限定类名即一个个自动配置类例如org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration。spring.factories文件示例org.springframework.boot.autoconfigure.EnableAutoConfiguration\ com.example.MyAutoConfiguration,\ org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration第3步过滤与条件装配核心中的核心此时Spring Boot获得了所有可能的自动配置类清单。但并非所有类都会生效。每个自动配置类上都标有大量的Conditional及其衍生注解如ConditionalOnClass,ConditionalOnMissingBean,ConditionalOnProperty。Spring Boot会逐一检查这些条件注解是否满足ConditionalOnClass类路径下存在指定的类时才生效。例如当存在DataSource.class时数据源相关的自动配置才生效。ConditionalOnMissingBean当Spring容器中不存在指定类型的Bean时才生效。这为用户自定义Bean覆盖默认配置提供了可能。ConditionalOnProperty当指定的配置属性满足条件时才生效。只有全部条件都满足的自动配置类才会被真正加载到Spring容器中。第4步注册Bean最终生效的自动配置类本身就是一个标准的Configuration类。在这些类中通过Bean注解定义了一系列的Bean如DataSource,DispatcherServlet,EntityManagerFactory等。这些Bean被注册到Spring IOC容器中从而完成了整个应用上下文的自动组装。四、一个生动的例子MyBatis-Spring-Boot-Starter引入依赖你在pom.xml中添加mybatis-spring-boot-starter。提供配置类该Starter的JAR包中包含META-INF/spring.factories文件其中声明了自己的自动配置类例如MybatisAutoConfiguration。条件判断MybatisAutoConfiguration类上可能标有ConditionalOnClass({ SqlSessionFactory.class, SqlSessionFactoryBean.class })。因为引入了Starter这些类都在类路径下条件满足。创建Bean该配置类内部会使用Bean注解自动创建并配置SqlSessionFactory、SqlSessionTemplate等MyBatis核心组件所需的Bean。用户自定义如果你想覆盖默认配置只需在自己的Configuration类中手动定义一个SqlSessionFactoryBean。由于ConditionalOnMissingBean的条件Spring Boot将优先使用你定义的Bean而不会使用自动配置提供的默认Bean。