SpringBoot-依赖管理和自动配置

依赖管理

  1. spring-boot-starter-parent的父项目
XML 复制代码
<!--几乎声明了所有开发中常用的依赖的版本号,自动版本仲裁机制-->
<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-dependencies</artifactId>
	<version>2.3.4.RELEASE</version>
</parent>
  1. starter场景启动器
  • 开发什么场景,导⼊什么场景启动器,场景启动器⾃动把这个场景的所有核⼼依赖全部导⼊
  • maven依赖传递原则。A-B-C: A就拥有B和C
  • spring-boot-starter-* : *就代表某种场景,SpringBoot所有支持的*场景
  • 引入starter-*,这个场景的所有常规需要的依赖都自动引入
  • *-spring-boot-starter: 第三方为我们提供的简化开发的场景启动器
  1. 版本号控制
  • 引入依赖默认都可以不写版本,父项目spring-boot-starter-parent已经将所有依赖设置默认版本,可以通过复写properties标签更改版本号
  • 引入非版本仲裁的jar,要写版本号。

自动配置

  1. 自动配置Tomcat
  • 想要自动配置好Tomcat就需要引入Tomcat依赖
XML 复制代码
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-tomcat</artifactId>
	<version>2.3.4.RELEASE</version>
	<scope>compile</scope>
</dependency>
  • 在依赖管理引入web场景的时候,就已经引入了Tomcat场景
XML 复制代码
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>
  1. 引入web依赖后自动配完成SpringMVC
  • 前端控制器DispatcherServlet:拦截所有的前端的请求
  • 字符编码characterEncodingFilter:解决返回中文字符串乱码问题
  • 视图解析器viewResolver:对返回的视图进行渲染呈现
  • 文件上传解析器multipatResolver:文件上传
java 复制代码
//返回IOC容器
ConfigurableApplicationContext run 
            = SpringApplication.run(MainApplication.class, args);
//查看容器里面的组件
String[] names = run.getBeanDefinitionNames();
for (String name : names) {
	System.out.println(name);
}
  1. 按需自动配置
  • SpringBoot所有的自动配置都依赖@EnableAutoConfiguration
  • SpringBoot所有的自动配置功能都在 spring-boot-autoconfigure 包里面
  • 引入了哪些场景,这个场景的自动配置才会开启,各种配置拥有默认值
    • ServerProperties 绑定了所有Tomcat服务器有关的配置
    • MultipartProperties 绑定了所有⽂件上传相关的配置
    • 默认值参照官⽅⽂档:或者参照 绑定的 属性类。
  1. 自动配置原理

https://blog.csdn.net/zl979899/article/details/122391622

包扫描规则

  • @SpringBootApplication 标注的类就是主程序类
  • SpringBoot默认只会扫描主程序类所在的包及其下⾯的子包,自动的component-scan功能
  • 自定义扫描路径
    • @SpringBootApplication(scanBasePackages = "com.xxx")
    • @ComponentScan("com.xxx") 直接指定扫描的路径
相关推荐
IT_陈寒10 小时前
Vite项目build后路由404了?你可能漏了这个小配置
前端·人工智能·后端
宸津-代码粉碎机10 小时前
Spring AI企业级实战|从RAG优化到Agent多工具调度
java·大数据·人工智能·后端·python·spring
吴佳浩11 小时前
AI Infra 的真相:Go 没输,rust也不是取代
后端·rust·go
喵个咪11 小时前
实时游戏网络协议深度对比:KCP vs WebRTC vs WebSocket
后端·websocket·webrtc
普通网友11 小时前
springboot之集成Elasticsearch
spring boot·后端·elasticsearch
QuZero11 小时前
Guava Cache Deep Dive
java·后端·算法·guava
invicinble11 小时前
关于flowable流程引擎技术栈相关
spring boot
leeyi11 小时前
SSE 实时推流 —— Token 怎么一个个蹦出来
后端·agent
leeyi12 小时前
ReAct 循环的 50 行 Go 实现,逐行拆解
后端·agent
leeyi12 小时前
HITL:让人类随时叫停 AI,并且能优雅地继续
后端·agent