SpringBoot之核心特性理解和Jar启动命令运行原理

SpringBoot之核心特性理解和Jar启动命令运行原理

    • 1、SpringBoot特点
      • [2.1 可以运行的Spring项目](#2.1 可以运行的Spring项目)
      • [2.2 内置Tomcat容器](#2.2 内置Tomcat容器)
      • [2.3 Starter依赖控制引入的Jar包版本](#2.3 Starter依赖控制引入的Jar包版本)
      • [2.4 自动装配Bean](#2.4 自动装配Bean)
    • [2、分析java -jar 启动命令原理](#2、分析java -jar 启动命令原理)
      • [2.1 分析jar包的文件结构](#2.1 分析jar包的文件结构)
      • [2.2 MANIFEST.MF文件](#2.2 MANIFEST.MF文件)
      • [2.3 通过IDEA窗口进行Debug调试](#2.3 通过IDEA窗口进行Debug调试)
    • 3、总结

1、SpringBoot特点

SpringBoot是一个用于简化Spring应用开发的框架,主要目的是减少配置,让开发人员聚焦在业务逻辑上从而提交开发效率。其中核心特点包含如下:
1、可以运行的Spring项目。
2、内置Tomcat容器。
3、Starter依赖提供对应Jar的版本控制
4、自动装配Bean

2.1 可以运行的Spring项目

打包为可执行 JAR 文件,通过 java -jar 直接运行。例如:

  • 切换到jar包对应的target目录
  • 通过 java -jar xxxx.jar 运行jar包

2.2 内置Tomcat容器

SpringBoot中除了集成Tomcat之外,还集成了Jetty和Undertow

2.3 Starter依赖控制引入的Jar包版本

以项目中引入的spring-boot-starter-web为例,而且Starter是一般是以功能为维度对所依赖的Jar包进行管理,如下图所示:

2.4 自动装配Bean

1、首先在项目的启动类上,标注@SpringBootApplication注解,其中主要实现自动装配Bean的原理是依赖@EnableAutoConfiguration。





以上是SpringBoot实现Bean的自动装配的核心代码逻辑 ,主要是从 META-INF/spring.factories 文件目录下 获取键为org.springframework.boot.autoconfigure.EnableAutoConfiguration的所有Bean对象, 因此如果要实现Bean的自动装配可以把需要注入的配置Bean添加至 META-INF/spring.factories即可。(注意这里说的是配置Bean哦,也就是被@Configuration修饰,这样Bean才会被IOC容器管理)

  • 如下以mybatis自动装配Bean实现为例嗷(直接上截图)

2、分析java -jar 启动命令原理

2.1 分析jar包的文件结构

2.2 MANIFEST.MF文件

2.3 通过IDEA窗口进行Debug调试

**具体步骤:**进入IDEA窗口 >> Edit Configurations >> 新建 Jar Application >> 选择对应的jar文件即可,如下图所示:

  • 调试并运行
  • 得到启动的jar
  • 得到所有依赖的jar文件
  • 解析MANIFEST.MF文件中的键值对

  • 获取主启动类Start-Class
  • 启动应用

根据反射原理执行主启动类的main方法,后面就进入SpringBoot项目的启动流程了。

3、总结

综上所述,是我对目前SpringBoot核心特性的理解以及springboot项目可以作为jar包直接运行的原因,如果存在不对的地方,望同学指导哈,这个也是一直困扰我的问题,希望可以帮助到屏幕前困惑的你!

相关推荐
程序员小杰@1 分钟前
Spring Boot 常用注解分类速记
java·spring boot·后端
挖掘狂人5 分钟前
Git 从 0 到 1:用一个小项目走完 add / commit / reset / merge / rebase / push
git·后端·github
vx_Biye_Design6 分钟前
springboot小学生英语学习APP62773-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·python·学习·课程设计
打工仔折腾 AI19 分钟前
用UU远程把家里电脑变成AI Agent常驻服务器:CLI、端口映射与代理实测
运维·服务器·人工智能·后端·python·电脑·ai agent 实战
明月_清风29 分钟前
AI Agent 进入系统层:现在有哪些开源项目在解决这个问题?
人工智能·后端
弈栈录1 小时前
MySQL 事务、索引与锁:后端开发必须掌握的数据库基础
数据库·后端
明月_清风1 小时前
AI Agent 最大的问题,可能不是智商,而是“权限”
人工智能·后端
9624561 小时前
餐饮 SaaS 优惠券系统架构演进(三):优惠计算引擎——商品级计价、冲突策略与优惠分摊
java·数据库·spring boot
vx_Biye_Design1 小时前
expressDeepSeek社团咨询助手的学生社团管理系统60746-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·python·课程设计·express
长安米粒贵1 小时前
缓存明明加了,为什么数据还是不一致?聊聊 4 个容易忽略的边界
后端