2026/1/11 12:39:09
网站建设
项目流程
人力资源网站,给装修公司做推广的网站,版面设计素材网站,深圳拼团手机网站开发Spring Boot 是基于 Spring Framework 的快速开发脚手架#xff0c;其核心目标是简化 Spring 应用的初始搭建和开发过程。它不是替代 Spring#xff0c;而是通过“约定优于配置”“自动配置”“起步依赖”等设计#xff0c;解决了传统 Spring 开发中配置繁琐、依赖冲突、部署…Spring Boot 是基于 Spring Framework 的快速开发脚手架其核心目标是简化 Spring 应用的初始搭建和开发过程。它不是替代 Spring而是通过“约定优于配置”“自动配置”“起步依赖”等设计解决了传统 Spring 开发中配置繁琐、依赖冲突、部署复杂等痛点。一、核心设计理念“约定优于配置”Convention Over Configuration传统 Spring显式配置为主几乎所有功能都需要手动配置XML 或 JavaConfig。例如配置 DispatcherServletSpring MVC 入口、视图解析器、数据源、事务管理器整合 MyBatis 时需手动定义SqlSessionFactory、MapperScannerConfigurer配置日志Log4j/Logback、AOP 切面、安全规则等。决策成本高开发者需为每个组件指定细节如端口、路径、连接池参数导致配置文件冗长如applicationContext.xml动辄数百行。Spring Boot默认约定优先基于“合理默认值”减少手动配置仅在偏离默认时显式调整。例如默认端口8080、上下文路径/、日志框架 Logback、JSON 解析器 Jackson引入spring-boot-starter-web自动配置 Spring MVC、内嵌 Tomcat、静态资源映射引入spring-boot-starter-data-jpa自动配置数据源、EntityManager、事务管理器。“零配置”启动通过SpringBootApplication注解组合了Configuration、EnableAutoConfiguration、ComponentScan一键启用自动配置无需 XML。也就是说传统 Spring 的痛点是“配置冗余”80% 的配置是“常规操作”如 Web 应用用 Tomcat、JSON 用 Jackson只有 20% 是个性化需求。开发者花大量时间写“本应默认”的配置而非业务逻辑。Spring Boot 的改进是把 80% 的常规配置固化为“约定”让开发者只关注 20% 的个性化配置。二、依赖管理起步依赖Starter Dependencies vs 手动管理传统 Spring依赖碎片化需手动引入大量独立依赖如 Spring Core、Spring MVC、Jackson、Tomcat Embed 等并自行协调版本兼容性易出现“依赖地狱”。示例传统 Spring MVC 项目 pom.xmldependencies !-- Spring 核心 -- dependency groupIdorg.springframework/groupId artifactIdspring-context/artifactId version5.3.20/version /dependency !-- Spring MVC -- dependency groupIdorg.springframework/groupId artifactIdspring-webmvc/artifactId version5.3.20/version /dependency !-- 内嵌 Tomcat -- dependency groupIdorg.apache.tomcat.embed/groupId artifactIdtomcat-embed-core/artifactId version9.0.63/version /dependency !-- JSON 解析 -- dependency groupIdcom.fasterxml.jackson.core/groupId artifactIdjackson-databind/artifactId version2.13.3/version /dependency !-- ... 其他依赖日志、验证、文件上传等 -- /dependencies版本冲突风险不同依赖可能依赖同一库的不同版本如 Spring 和 Hibernate 依赖不同版本的 Jackson需手动排除冲突。Spring Boot起步依赖Starters将常用场景的依赖打包为“一站式” Starter自动管理版本兼容。例如spring-boot-starter-web包含 Spring MVC、内嵌 Tomcat、Jackson、Validation 等 Web 开发必备依赖spring-boot-starter-data-jpa包含 Spring Data JPA、Hibernate、数据库连接池HikariCP等 ORM 依赖spring-boot-starter-test包含 JUnit、Mockito、AssertJ 等测试依赖。示例Boot Web 项目 pom.xmldependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId !-- 无需指定版本由 spring-boot-starter-parent 统一管理 -- /dependency /dependencies parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version3.1.3/version !-- Boot 统一管理所有依赖版本 -- relativePath/ /parent版本仲裁通过spring-boot-dependencies父工程预定义数千个依赖的兼容版本避免冲突。如需覆盖版本可在pom.xml中显式声明。三、部署方式可执行 JAR内嵌容器 vs 传统 WAR传统 SpringWAR 包部署需打包为 WAR 文件依赖外部 Servlet 容器如 Tomcat、Jetty部署流程为本地打包mvn clean package生成xxx.war上传到服务器放入 Tomcat 的webapps目录启动 Tomcat 容器加载应用。环境依赖服务器需预装指定版本的 Servlet 容器且应用与容器版本强耦合如 Tomcat 9 不支持 Jakarta EE 9。Spring Boot可执行 JAR/WAR通过内嵌 Servlet 容器Tomcat/Jetty/Undertow打包为包含所有依赖的“胖 JAR”Fat JAR可直接通过java -jar运行java -jar target/myapp-1.0.0.jar # 直接启动无需外部容器部署简化无需预装容器跨环境一致性高开发/测试/生产环境使用相同 JAR支持传统 WAR 部署通过spring-boot-starter-tomcat的provided作用域将容器交给外部管理容器可配置如修改端口server.port8081或切换容器spring-boot-starter-jetty。四、自动配置AutoConfiguration减少手动 Bean 定义传统 Spring显式 Bean 定义需通过 XML 或Bean注解手动注册所有组件。例如配置 Spring MVC 需定义Configuration public class MvcConfig implements WebMvcConfigurer { Bean public ViewResolver viewResolver() { InternalResourceViewResolver resolver new InternalResourceViewResolver(); resolver.setPrefix(/WEB-INF/views/); resolver.setSuffix(.jsp); return resolver; } }整合第三方组件复杂如整合 Redis 需手动配置RedisTemplate、ConnectionFactory并处理序列化逻辑。Spring Boot自动配置原理基于类路径扫描 和条件注解ConditionalOnClass、ConditionalOnMissingBean等根据项目依赖自动注册 Bean。例如当类路径存在DispatcherServlet.class即引入spring-boot-starter-web自动配置DispatcherServlet、HandlerMapping等 MVC 组件当存在DataSource.class和Hibernate.class即引入spring-boot-starter-data-jpa自动配置EntityManagerFactory、TransactionManager当存在RedisTemplate.class即引入spring-boot-starter-data-redis自动配置连接池和序列化器。自定义配置覆盖通过application.properties或Configuration类覆盖默认配置。例如# 修改内嵌 Tomcat 端口 server.port8081 # 配置数据源 spring.datasource.urljdbc:mysql://localhost:3306/mydb spring.datasource.usernameroot spring.datasource.password123456自动配置的本质:Spring Boot把传统Spring中那些重复的、模板化的Bean配置都写好了,根据你添加的依赖自动创建这些Bean,你只需要通过properties文件调整参数就行工作流程:Spring Boot启动时扫描所有jar包的META-INF/spring.factories找到所有自动配置类(比如DataSourceAutoConfiguration)检查Conditional条件是否满足:classpath里有没有DataSource.class? ✓ (因为你添加了JDBC依赖)你自己配置了DataSource了吗? ✗ (没配置)条件都满足,创建DataSourceBean从application.properties读取配置注入到Bean里