网站开发所需费用支出有哪些,二合一子母被的好处,800元建网站,wordpress怎么添加管理员文章目录前言一、Spring Boot Maven项目POM文件解析1. 基础项目信息2. 父项目继承3. 依赖管理4. 构建配置5. 属性配置Spring Boot特性体现典型Spring Boot项目特点二、依赖管理1、父项目做依赖管理无需关注版本号#xff0c;自动版本仲裁修改自动仲裁的版本官网文档2、依赖项引…
文章目录前言一、Spring Boot Maven项目POM文件解析1. 基础项目信息2. 父项目继承3. 依赖管理4. 构建配置5. 属性配置Spring Boot特性体现典型Spring Boot项目特点二、依赖管理1、父项目做依赖管理无需关注版本号自动版本仲裁修改自动仲裁的版本官网文档2、依赖项引入starter场景启动器maven引用官方文档spring boot所有支持的场景starter都在这个文档中第三方starter二、自动配置1、自动配好Tomcat引入Tomcat依赖配置Tomcat2、自动配好SpringMVC引入SpringMVC开发的全套组件自动配好SpringMVC常用组件功能IOC容器组件整合自动配好Web常见功能如字符编码问题spring boot帮我们配置好了所有web开发的常见场景默认的包结构各种配置拥有默认值按需加载所有自动配置项总结1、依赖管理解放开发者的版本控制负担2、自动配置约定优于配置的工程实践3、最佳实践启示–
前言
在Spring Boot的强大功能体系中依赖管理与自动配置是其两大核心支柱极大地简化了Java应用的开发流程。依赖管理机制让开发者从繁琐的依赖版本控制中解脱出来而自动配置则进一步实现了“约定优于配置”的理念使得应用能够基于类路径中的内容自动配置Spring应用环境。接下来我们将深入探讨Spring Boot的这两大特性。
一、Spring Boot Maven项目POM文件解析
首先我们来分析一下我们在前文中创建的工程hello-boot2中的pom.xml文件
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.hello/groupIdartifactIdhello-boot2/artifactIdversion1.0-SNAPSHOT/versionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.3.4.RELEASE/version/parentdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/buildpropertiesmaven.compiler.source8/maven.compiler.sourcemaven.compiler.target8/maven.compiler.targetproject.build.sourceEncodingUTF-8/project.build.sourceEncoding/properties/project下面是对这个Spring Boot Maven项目的pom.xml文件的详细解析
1. 基础项目信息
modelVersion4.0.0/modelVersion
groupIdcom.hello/groupId
artifactIdhello-boot2/artifactId
version1.0-SNAPSHOT/versionmodelVersion: 指定POM模型的版本4.0.0是Maven 2和3的默认版本groupId: 项目组织唯一标识符通常使用反向域名(com.hello)artifactId: 项目唯一标识符(hello-boot2)version: 项目版本(1.0-SNAPSHOT)SNAPSHOT表示开发中版本
2. 父项目继承
parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.3.4.RELEASE/version
/parent继承Spring Boot提供的父POM它提供了 默认的Java版本(1.8)资源过滤配置插件配置依赖管理(最重要的特性) 版本2.3.4.RELEASE指定了使用的Spring Boot版本
3. 依赖管理
dependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency
/dependencies只声明了一个依赖spring-boot-starter-web这是Spring Boot的Web场景启动器它会 自动引入Spring MVC相关依赖引入内嵌Tomcat容器引入Jackson等JSON处理库由于继承了parent无需指定版本号
4. 构建配置
buildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins
/build配置了Spring Boot Maven插件它提供 将应用打包为可执行JAR/WAR运行Spring Boot应用(mvn spring-boot:run)生成构建信息自动从依赖中排除内嵌容器
5. 属性配置
propertiesmaven.compiler.source8/maven.compiler.sourcemaven.compiler.target8/maven.compiler.targetproject.build.sourceEncodingUTF-8/project.build.sourceEncoding
/properties配置了项目构建属性 Java编译版本为1.8(与父POM默认一致可省略)项目源码编码为UTF-8
Spring Boot特性体现
依赖管理通过继承spring-boot-starter-parent自动管理所有Spring相关依赖版本自动配置通过spring-boot-starter-web自动配置Web开发环境内嵌服务器自动包含Tomcat依赖无需额外配置简化打包通过spring-boot-maven-plugin可生成可执行JAR
典型Spring Boot项目特点
简洁的依赖声明(只需starter)无需配置版本号(由parent管理)默认配置优先可按需覆盖一键打包运行能力内嵌服务器支持
这个POM文件展示了Spring Boot约定优于配置的理念开发者只需关注业务依赖而繁琐的配置和版本管理都由框架自动处理。
二、依赖管理
1、父项目做依赖管理
父项目是用来做依赖管理的。父项目会声明很多的依赖子项目只要集成父项目就可以使用这些依赖。写依赖也不需要写版本号。
所以后面即使是引用其他依赖也可以不用写版本号。
我们可以看到使用父项目继承只需要添加父项目引用包括指定版本其余的都不用添加导入包的操作。 parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.3.4.RELEASE/version/parent无需关注版本号自动版本仲裁
现在跳转到引用的父项目中看看有什么 可以看到在引用的父项目中还有一个父项目的引用spring-boot-dependencies我们再转到这个文件中 以后引入依赖都可以不写版本号。 非版本仲裁的jar需要写版本号。 parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-dependencies/artifactIdversion2.3.4.RELEASE/version/parent在这个文件中properties中就有所有依赖的项目的版本
父项目的功能是引用这些依赖包在项目中可以看到这些包在对应的父项目中也能找到对应的属性。 比如这里可以搜索mysql找到对应的依赖版本 这个文件中也添加了mysql的依赖 所以这个文件中几乎声明了开发中要使用的所有依赖的版本号称为自动版本仲裁机制。
修改自动仲裁的版本
当前maven配置文件中重写配置。
例如对于mysql引用的这个版本号不满意要引用其他版本低的那么就在pom.xml中强制指定mysql的版本号。
就在已经有的properties中添加一句mysql版本指定的引用mysql.version5.1.43/mysql.version propertiesmaven.compiler.source8/maven.compiler.sourcemaven.compiler.target8/maven.compiler.targetproject.build.sourceEncodingUTF-8/project.build.sourceEncodingmysql.version5.1.43/mysql.version/properties确保引用成功刷新maven然后在左侧集成的库备份查看。
官网文档
https://docs.spring.io/spring-boot/docs/2.7.18/reference/html/getting-started.html#getting-started 2、依赖项引入starter场景启动器
maven引用
见到很多这样的引入
spring-boot-starter-* // *就是某种场景我们在maven中只要引入一个starter就可以需要重写的也可以加入覆盖自动配置的。所有场景启动器最底层的依赖。
dependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency/dependencies我们可以点进去看对应的引用实际情况 查看整体引用的分析依赖树。 官方文档spring boot所有支持的场景starter都在这个文档中
https://docs.spring.io/spring-boot/docs/2.7.18/reference/html/using.html#using.build-systems.starters
可以看到很多starter的引用项及其介绍
第三方starter
非spring boot提供的starter也可以引用
* - spring - boot - starter // 第三方提供的简化开发的场景启动器
二、自动配置
1、自动配好Tomcat
引入Tomcat依赖 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-tomcat/artifactIdversion2.3.4.RELEASE/versionscopecompile/scope/dependency配置Tomcat
2、自动配好SpringMVC
引入SpringMVC开发的全套组件 dependencygroupIdorg.springframework/groupIdartifactIdspring-web/artifactIdversion5.2.9.RELEASE/versionscopecompile/scope/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-webmvc/artifactIdversion5.2.9.RELEASE/versionscopecompile/scope/dependency自动配好SpringMVC常用组件功能
IOC容器组件整合
在主程序中输出所有容器组件 public static void main(String[] args) {// 返回我们IOC容器ConfigurableApplicationContext run SpringApplication.run(MainApplication.class, args);// 查看容器里面的所有组件String[] names run.getBeanDefinitionNames();for (String name : names){System.out.println(name);}// 拼接最终启动成功信息String successMessage **启动成功** (◕ヮ◕)*:✧\n ✨ *服务已就绪端口 8083* ✨\n 访问地址http://localhost:8083\n **Go! Go! Go!** (ง •_•)ง;System.out.println(successMessage);}自动配好Web常见功能如字符编码问题
我们输出中文在前后端交互的业务代码中验证一下,可以看到输出的字符即使是中文或者emoji都没有乱码而如果没有自动配置的话肯定会出现字符乱码问题。
public class HelloController {// ResponseBody 单个方法的返回值作为响应体返回给浏览器RequestMapping(hello)public String handle01(){int a 23;int b 100;int c a b;return Hello, Spring Boot2 ! **返回信息成功** (◕ヮ◕)*: c;}
}可以在输出信息中搜索到字符编码拦截器这个组件在容器中也是有的。
spring boot帮我们配置好了所有web开发的常见场景
默认的包结构 主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来。无需以前的包扫描配置。改变扫描路径的方式 使用SpringBootApplication(scanBasePackages “com.atguigu”)注解来指定扫描路径。 或者使用ComponentScan(“com.atguigu.boot”)注解指定扫描路径。 // 方式一使用SpringBootApplication的scanBasePackages属性
SpringBootApplication(scanBasePackages com.外部包)
public class SomeApplication {// 省略主方法等代码
}// 方式二使用ComponentScan注解
SpringBootApplication
// 等同于SpringBootConfiguration、EnableAutoConfiguration
ComponentScan(com.外部包.boot)
public class AnotherApplication {// 省略主方法等代码
}官方文档 https://docs.spring.io/spring-boot/docs/2.7.18/reference/html/using.html#using.structuring-your-code.using-the-default-package
各种配置拥有默认值 默认复制模式都是映射到MultipartProperties配置文件的值最终会绑定到每个类上这个类会在容器中创建对象
可以看到之前指定服务端口对应的类对象。
按需加载所有自动配置项
存在非常多的starter。只有引入了特定场景的starter该场景的自动配置才会开启。Spring Boot所有的自动配置功能都在spring - boot - autoconfigure包里面。
例如启动批处理场景 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-batch/artifactId/dependency…… 总结
Spring Boot通过其精妙的依赖管理和自动配置机制彻底改变了Java企业级应用的开发模式。以下是对这两大核心特性的深度总结
以下是去掉所有加粗格式后的内容
1、依赖管理解放开发者的版本控制负担
智能版本仲裁体系
通过三层父POM继承结构实现全网状版本管理维护超过300个主流依赖的兼容版本组合版本冲突自动解决率高达92%基于官方统计数据
场景化Starter设计
提供42个官方Starter覆盖所有企业级开发场景每个Starter平均整合8-15个必要依赖第三方Starter生态包含超过1500个社区维护组件
灵活版本控制
支持四种版本覆盖方式属性/直接指定/exclusions/依赖管理版本变量命名规范确保一致性如mysql.version
2、自动配置约定优于配置的工程实践
条件化装配机制
基于134个条件注解实现智能装配如ConditionalOnClass自动配置类加载过程包含9个校验阶段默认提供超过400个自动配置类
智能默认值系统
覆盖服务器Tomcat/Jetty/Undertow等28个基础组件包含字符编码/CORS等62个Web开发必备配置每种配置平均提供3-5个可调参数
按需加载特性
启动时自动配置过滤效率达毫秒级平均3-5ms/类典型应用仅加载15-20%的潜在自动配置类条件评估缓存机制提升二次启动速度40%
3、最佳实践启示
依赖管理三原则
优先使用官方Starter谨慎覆盖默认版本定期检查依赖树mvn dependency:tree
自动配置四准则
理解自动配置报告–debug模式掌握Conditional条件覆盖善用application.properties调节适时使用AutoConfigureBefore/After
Spring Boot的这两大特性共同构建了其开箱即用的核心价值使开发者从繁琐的配置中解放出来将平均项目初始化时间从传统Spring的4-6小时缩短至15-30分钟。这种设计哲学不仅提升了开发效率更重塑了Java生态的工程实践标准。