初始SpringBoot:详解特性和结构

在这里插入图片描述

🏡浩泽学编程:个人主页

 🔥 推荐专栏:《深入浅出SpringBoot》《java项目分享》
              《RabbitMQ》《Spring》《SpringMVC》

🛸学无止境,不骄不躁,知行合一

文章目录

  • 前言
  • 一、SpringBoot项目结构
    • 1.启动类的位置
    • 2.pom文件
      • start
      • parent
      • 打包
  • 二、依赖管理特性
  • 三、自动配置特性
  • 总结


前言

SpringBoot项目结构,特性介绍(常用到的基本都讲解了,很详细,基于官方文档讲解)。


一、SpringBoot项目结构

IDEA创建非常简单,不是主要讲解,我使用的是IDEA2023.3(这里默认你Maven环境都配好了)

在这里插入图片描述
在这里插入图片描述

创建完成后的文件结构如下:

在这里插入图片描述

  • java:java包下存放的是开发创建的类、接口等。
    • 这里restart是我的工程名,同时它就是项目工程文件夹,开发所创建的包、类基本都在这文件夹下。
    • SpringBoot启动类(这里的启动类是RestartApplication,SpringBoot项目创建完成后默认的启动类名称是首字母大写的项目工程名+Application)放在工程文件夹下,即:工程文件夹 / 启动类。不在嵌套文件夹。
  • resources
    • 存放静态资源文件的地方:html、css、照片、配置文件(properties文件,yaml文件等)。
  • pom.xml
    • 引入依赖文件,用于引入你工程所需要的依赖。

1.启动类的位置

  • 官方建议最佳实战就是将启动类放在工程文件夹下的第一层,不需要再嵌套文件夹。
  • 官方说:@SpringBootApplication 注解一般都是注解在启动类上的。它默认会扫描当前类下的所有子包(也就是与当前启动类同级文件夹的包及其下的所有包,如下图的customer、order包及其下的所有包)。例如,如果你正在编写一个JPA应用程序,你的 @Entity 类只有定义在启动类的子包下才能被扫描加载到。这样的好处也显而易见,@SpringBootApplication 默认只会扫描加载你项目工程中的组件。
//初始创建的SpringBoot项目的启动类都是如下代码:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class RestartApplication {public static void main(String[] args) {SpringApplication.run(RestartApplication.class, args);}}

在这里插入图片描述

2.pom文件

在这里插入图片描述

  • 大多数Spring Boot应用在POM的 parent 部分使用 spring-boot-starter-parent。 spring-boot-starter-parent 是一个特殊的starter,提供有用的Maven默认值
  • 需要的依赖在 < dependency > 标签内导入需要的< dependeny>

start

  • Starter是一系列开箱即用的依赖,你可以在你的应用程序中导入它们。 通过你Starter,可以获得所有你需要的Spring和相关技术的一站式服务,免去了需要到处大量复制粘贴依赖的烦恼。
    • 例如,如果你想开始使用Spring和JPA进行数据库访问,那么可以直接在你的项目中导入 spring-boot-starter-data-jpa 依赖。(也就是说现在你想要什么依赖,只需要spring-boot-start-xxx就可以帮你自动导入这方面的所有常规依赖在这里插入图片描述
  • Starter含了很多你需要的依赖,以使项目快速启动和运行,并拥有一套一致的受支持的可管理的过渡性依赖。

例子:
在idea的终端输入 mvn dependency:tree打印了一个项目依赖的树状图,如下:
在这里插入图片描述

你可以看到 spring-boot-starter-parent 本身没有导入什么依赖(就是一些基本的依赖如spring方面的,日志方面的等)。 要导入必须的依赖,需要编辑 pom.xml 文件。

假如正在开发一个Web应用程序,我们添加一个 spring-boot-starter-web 依赖项:

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
</dependencies>

如果你再次运行 mvn dependency:tree ,你会看到现在有一些额外的依赖,包括Tomcat web服务器等。基本将常规依赖都引入进来了。
在这里插入图片描述

parent

  • spring-boot-starter-parent 是一个特殊的starter,它在POM.xml里面声明了spring boot的各个依赖及其版本。子项目直接继承它,子项在导入 spring boot 依赖时,不需要声明版本号
    • 通俗的说parent部分就是在你导入spring-boot-start–parent时,自动帮你冲裁了版本号,你在dependenys标签里的依赖可以不用写版本号

提问:不想使用仲裁版本怎么办?
在pom.xml重写配置,如下面的代码(这里以mysql为例,换成5.1.43版本):

<properties><mysql.version>5.1.43</mysql.version>
</properties>

打包

使用Maven快速打包

IDEA内终端运行mvn package

$ mvn package[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building myproject 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] .... ..
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ myproject ---
[INFO] Building jar: /Users/developer/example/spring-boot-example/target/myproject-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:3.2.0-SNAPSHOT:repackage (default) @ myproject ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

另一种:
在这里插入图片描述

运行后你会发现工程内多个target文件夹:
在这里插入图片描述

如果你查看 target 目录,你应该看到 项目名-0.0.1-SNAPSHOT.jar
(没有target可以在从电脑中找到项目文件夹,里面应该能找到target文件夹,在jar包所在文件夹打开电脑终端,运行java -jar 项目名-1.0-SNAPSHOT.jar

在这里插入图片描述
在这里插入图片描述

IDEA终端运行java -jar target/myproject-0.0.1-SNAPSHOT.jar

$ java -jar target/myproject-0.0.1-SNAPSHOT.jar.   ____          _            __ _ _/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/  ___)| |_)| | | | | || (_| |  ) ) ) )'  |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot ::  (v3.1.2-SNAPSHOT)
....... . . .
....... . . . (log output here)
....... . . .
........ Started MyApplication in 0.999 seconds (process running for 1.253)

要退出应用程序,按 ctrl-c。

如果你想看看这jar里面到底有什么东西,你可以使用 jar tvf:jar tvf target/项目名-0.0.1-SNAPSHOT.jar

二、依赖管理特性

Spring Boot的每个版本都提供了一个它所支持的依赖的列表。 在实践中,你不需要在构建配置中为这些依赖声明版本,因为Spring Boot会帮你管理这些。 当你升级Spring Boot本身时,这些依赖也会一同升级。(所以现在你联系一下parent和start是不是豁然开朗)

  • 开发导入starter场景启动器
    1. spring-boot-starter-* : * 就是某种场景
    2. 只要引入starter,这个场景的所有常规需要的依赖我们都自动引入
    3. 更多SpringBoot所有支持的场景
    4. *-spring-boot-starter: 第三方为我们提供的简化开发的场景启动器。
所有场景启动器最底层的依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><version>3.1.2</version><scope>compile</scope>
</dependency>
  • 无需关注版本号,自动版本仲裁

    1. 引入依赖默认都可以不写版本
    2. 引入非版本仲裁的jar,要写版本号
  • 可以修改默认版本号

    1. 查看spring-boot-dependencies里面规定当前依赖的版本 用的 key。
    2. 在当前项目里面重写配置,如下面的代码。
<properties><mysql.version>5.1.43</mysql.version>
</properties>

IDEA快捷键:

  • ctrl + shift + alt + U:以图的方式显示项目中依赖之间的关系。
  • alt + ins:相当于Eclipse的 Ctrl + N,创建新类,新包等。

三、自动配置特性

  • 自动配好Tomcat
    • 引入Tomcat依赖。
    • 配置Tomcat
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><version>3.1.2</version><scope>compile</scope>
</dependency>
  • 自动配好SpringMVC

    • 引入SpringMVC全套组件
    • 自动配好SpringMVC常用组件(功能)
  • 自动配好Web常见功能,如:字符编码问题

    • SpringBoot帮我们配置好了所有web开发的常见场景
public static void main(String[] args) {//1、返回我们IOC容器ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);//2、查看容器里面的组件String[] names = run.getBeanDefinitionNames();for (String name : names) {System.out.println(name);}
}

在这里插入图片描述
这里截取了一部分,可以看出里面SpringBoot真的很强大,不需要SSM一样导入一堆依赖。

  • 默认的包结构
    • 主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来
    • 无需以前的包扫描配置
    • 想要改变扫描路径
      • @SpringBootApplication(scanBasePackages=“com.dragon”)
      • @ComponentScan 指定扫描路径
@SpringBootApplication
等同于
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.lun")
  • 各种配置拥有默认值

    • 默认配置最终都是映射到某个类上,如:MultipartProperties
    • 配置文件的值最终会绑定每个类上,这个类会在容器中创建对象
  • 按需加载所有自动配置项

    • 非常多的starter
    • 引入了哪些场景这个场景的自动配置才会开启
    • SpringBoot所有的自动配置功能都在 spring-boot-autoconfigure 包里面
      在这里插入图片描述
      在这里插入图片描述

下面是参考文档,有兴趣的朋友可以看看:

Spring Boot Maven 插件文档
中文文档——SpringBoot入门


总结

以上就是SpringBoot的特性及结构的具体讲解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/589526.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[情商-2]:理解情商最关注的要素 - 情绪,情绪,情绪,不是事情本身,不是逻辑推理,不是讲道理

前言&#xff1a; 情商最关注的要素是情绪&#xff0c;他人的情形&#xff0c;自己的情绪&#xff0c;情绪是一个完全不同于技术人员经常关注的逻辑推理、问题解决。对于技术人员而言&#xff0c;它是一个完全不同的领域&#xff0c;有着不同的行为模式。 因此&#xff0c;在…

MySQL所有常见问题

一、事务 定义:一组操作要么全部成功,要么全部失败,目的是为了保证数据最终的一致性 在MySQL中,提供了一系列事务相关的命令: start transaction | begin | begin work:开启一个事务commit:提交一个事务rollback:回滚一个事务事务的ACID 原子性(Atomicity):当前事…

AI人工智能技术发现了拉斐尔名画背后的秘密:这幅画并非完全由大师本人完成

最近&#xff0c;一个先进的人工智能神经网络在拉斐尔的名画中发现了一个不寻常的地方&#xff1a;其中的一副面孔并非由拉斐尔本人绘制&#xff0c;而是出自其他艺术家之手。 详细文章网址链接&#xff1a;Deep transfer learning for visual analysis and attribution of pai…

负载均衡概述

负载均衡 负载均衡 建立在现有网络结构之上&#xff0c;它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。 四层负载均衡 vs 七层负载均衡 四层负载均衡&#xff08;目标地址和端口交换&#xff09;…

[C#]使用ONNXRuntime部署一种用于边缘检测的轻量级密集卷积神经网络LDC

源码地址&#xff1a; github.com/xavysp/LDC LDC: Lightweight Dense CNN for Edge Detection算法介绍&#xff1a; 由于深度学习方法的快速发展&#xff0c;近年来&#xff0c;用于执行图像边缘检测的卷积神经网络&#xff08;CNN&#xff09;模型爆炸性地传播。但边缘检测…

【42页动态规划学习笔记分享】动态规划核心原理详解及27道LeetCode相关经典题目汇总

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推荐--…

计算机视觉工程师就业前景如何

计算机视觉主要涵盖了图像处理、模式识别等多个领域&#xff0c;可以应用到很多行业中。随着人工智能技术的快速发展&#xff0c;计算机视觉作为其中的重要分支之一&#xff0c;其就业前景非常广阔。 为进一步贯彻落实中共中央印发《关于深化人才发展体制机制改革的意见》和国…

Sensor Demosaic IP 手册PG286笔记

《 UG1449 Multimedia User Guide》中包含了大量的多媒体IP简介。 本IP 用于对bayer RGB&#xff08;每个pixel只有单个R/G/B&#xff09;做去马赛克处理&#xff0c;恢复成每个pixel点都有完整的RGB值。通过axi接口配置IP内部erg。 1、算法手册中的描述 提到了几种插值算法&…

MySQL基础笔记(1)基础理论

一.基本概念 DB&#xff1a;数据库&#xff0c;存储数据的仓库&#xff0c;数据是有组织地进行存储DBMS&#xff1a;操纵和管理数据库的大型软件 SQL&#xff1a;结构化查询语言&#xff0c;操作关系型数据库的编程语言&#xff0c;定义了一套操作关系型数据库的统一标准 &…

关于Python里xlwings库对Excel表格的操作(二十四)

这篇小笔记主要记录如何【如何使用xlwings库中的“api”类设置单元格边界线型、粗细、颜色】。前面的小笔记已整理成目录&#xff0c;可点链接去目录寻找所需更方便。 【目录部分内容如下】【点击此处可进入目录】 &#xff08;1&#xff09;如何安装导入xlwings库&#xff1b;…

C++的面向对象学习(9):文件操作

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、类的封装的多文件实现回顾二、文件操作1.对文件进行操作需要头文件<fstream>2.操作文件的三大类方法&#xff1a;读、写、读写 三、实现文本文件的读、写…

《2023年企业IoT和OT威胁报告》:物联网恶意软件攻击增长400%

内容概括&#xff1a; 物联网&#xff08;IoT&#xff09;设备无疑改变了我们生活、工作和管理运营技术&#xff08;OT&#xff09;环境的方式。总体而言&#xff0c;到2027年&#xff0c;全球物联网设备数量预计将超过290亿&#xff0c;比2023年的167亿大幅增加。设备和智能技…

SiteGround 注册无法接收短信验证码问题的解决方法

在购买SiteGround后&#xff0c;有时会出现需要进行账号验证的情况&#xff0c;要求通过短信或电话完成验证。然而&#xff0c;有些用户无论如何操作都无法收到短信验证码。以下是解决这个问题并成功完成服务器购买的方法。 Thank You for Your Purchase! Lets Verify Your Ord…

虚拟专线网络(IP-VPN)

虚拟专线网络(IP-VPN)&#xff0c;因为它的安全性和可靠性。通过亚洲领先的 IP VPN 提供商。享受更高的可管理性和可扩展性&#xff0c;在多个站点之间交付 IP 流量或数据包&#xff0c;拥有亚太地区最大的 IP 骨干网。 1&#xff0c;保证正常运行时间&#xff0c;在网络链路发…

C++数据结构-栈

目录 栈顺序栈链栈 栈 栈是允许在表的一端进行插入和删除的线性表。表中允许插入删除的一端是栈顶&#xff0c;栈顶的当前位置是动态变化的&#xff1b;不允许插入和删除的一端是栈底&#xff0c;栈底的位置是不变的。当表中没有元素时称为空栈&#xff0c;插入数据的运算称为…

字符串与模拟法

加密英文 输入一个字符串可用getline(cin,数组名) 字典序 在字符串中寻找子字符串 分糖果 代码 猴子选大王 代码 如果n号猴子被选中&#xff0c;则使得n号的猴子变成false&#xff0c;未出局的猴子为true。 if(pn1) p1;这个是将超出的下标重新变回1号&#xff0c;使其重新循…

PromQL语法

PromQL&#xff08;Prometheus Query Language&#xff09;是 Prometheus 内置的数据查询语言&#xff0c;它能实现对事件序列数据的查询、聚合、逻辑运算等。它被广泛应用在 Prometheus 的日常应用当中&#xff0c;包括对数据查询、可视化、告警处理当中。简单地说&#xff0c…

易趋产品升级(EasyTrack 11_V1.3) | 集成飞书、WPS、个性化设置,增强团队协作和用户体验

企业在项目管理过程中&#xff0c;经常会遇到项目信息同步不及时、沟通障碍以及管理软件使用不便捷等难题&#xff0c;导致团队协作效率低下。这种情况下&#xff0c;如果使用了多个办公软件&#xff08;如&#xff1a;钉钉、企业微信、项目管理软件等&#xff09;&#xff0c;…

35--JDK新特性

1、新语法结构 新的语法结构&#xff0c;为我们勾勒出了 Java 语法进化的一个趋势&#xff0c;将开发者从复杂、繁琐的低层次抽象中逐渐解放出来&#xff0c;以更高层次、更优雅的抽象&#xff0c;既降低代码量&#xff0c;又避免意外编程错误的出现&#xff0c;进而提高代码质…

【VB测绘程序设计】案例6——华氏温度与摄氏温度之间的转换程序(附源代码)

【VB测绘程序设计】案例6——华氏温度与摄氏温度之间的转换程序(附源代码) 文章目录 前言一、界面显示二、程序说明三、程序代码1程序变换2程序变换四、数据演示总结前言 本文主要掌握Val()函数以及String数据类型的应用,通过2个text来输入数据,2个Command控件来执行转换…