当前位置: 首页 > news >正文

JavaEE - Spring Boot 简介

1.Maven

1.1 什么是Maven

翻译过来就是:

Maven是⼀个项⽬管理⼯具。基于POM(Project Object Model,项⽬对象模型)的概念,Maven可以通 过⼀⼩段描述信息来管理项⽬的构建,报告和⽂档的项⽬管理⼯具软件。

可以理解为:Maven是一个项目管理工具,通过pom.xml文件的配置来获取jar包,而不用手动去添加jar包。

1.2 为什么学习Maven

特点:简单,方便,提高我们的开发效率,减少我们的开发bug。

并且,Maven提供的功能非常多,主要有:1.项目构建,2.管理依赖。

1.3 创建一个Maven项目

IDEA本⾝已经集成了Maven,我们可以直接使用,无需安装。

不同版本的idea界面展示会有所不同,以下截图idea版本为2024.1

 这样我们就创建好了一个Maven项目。

1.4 Maven核心功能

详细讲解Maven在项目开发中的作用。

1.项目构建

2.管理依赖 

1.4.1 项目构建

Maven提供了标准的,跨平台(Linux,Windows,MacOS等)的⾃动化项⽬构建⽅式,当我们开发了⼀个项⽬之后,代码需要经过编译,测试,打包,发布等流程,每次代码的修改,都需要经过这些流程,如果代码反复调试修改,这个流程就需要反复进⾏,就显得特别麻烦,而Maven给我们提供了 ⼀套简单的命令来完成项⽬的构建。

Maven的命令有以下: 

例如,点击package,就可以完成项目的打包操作。

 

打包就是把所有的class文件全部放在一起,打成jar包或者war包。

jar包和war包都是⼀种压缩⽂件。

jar包就是把开发⼈员已经写好的⼀些代码进⾏打包.打好的jar包就可以引⼊到其他项⽬中,也可以直 接使⽤这些jar包中的类和属性.另外也可以打成可执⾏jar包,这样的包就可以通过java -jar命令来执行。

war包可以理解为是⼀个web项⽬,⾥⾯是项⽬的所有东西,通常⽤于⽹站。

1.4.2 依赖管理

Maven是一个项目管理工具,通过pom.xml文件的配置获取jar包,而不用手动去添加jar包。获取的jar包其实就是依赖。

pom.xml就是maven的配置文件,用以描述项目的各种信息。

依赖:指当前项目运行所需要的jar包。

使用JDBC需要手动下载mysql-connector-java的包,并且添加到项目中。

但是,如果使用maven,我们只需要在pom.xml中引入mysql-connector-java的依赖就可以了。

步骤1):在pom.xml文件 <dependencies> 标签内,添加依赖坐标

需要的依赖jar包在中央仓库都可以找到:Maven Repository: Central (mvnrepository.com)

步骤2):点击刷新按钮,引入新加入的依赖jar包

后续有添加新的jar包,或者修改jar包版本,都需要通过该⽅式在项⽬中添加依赖.

 

步骤3):刷新完之后,就可以在项目中看到新加入的jar包

依赖传递

早期我们没有使用maven时,想向项目中添加依赖的jar包,需要把所有的jar包都复制到项目工程下。

比如A依赖B,B依赖C,那么项目A引入B的同时,也需要引入C,如果手动管理这个依赖过程就麻烦。我们需要知道每个库都依赖哪些库,以及这些依赖之间的版本是如何关联的。

但,使用maven的话,就可以避免管理所依赖的关系。只需要在pom文件中,定义直接依赖就可以。由于maven的依赖具有传递性,所以会自动把所依赖的其他jar包也一起导入。

1.4.3 Maven Help 插件

当项⽬⽐较复杂时,我们就会有Jar包冲突的问题,这时候就需要去解决依赖冲突.解决冲突之前,需要先 找到冲突,我们可以使⽤Maven Help插件来观察包和包之间的依赖关系.

插件就是对程序的⼀些特定场景,做出⼀些特定的功能的扩展。 

安装插件:File ->Settings ->Plugins ->搜索'Maven Help' -> 找到对应插件, 点击Install 安装即可,安装后需要重启下idea,才能⽣效。

安装之后,打开pom⽂件,可以看到Jar包之间的依赖关系;也可以右键手动删除一些依赖。

 1.5 Maven仓库

我们通过几行代码就把依赖的jar包放在了项目里,具体是如何实现的?

<dependencies><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.3.0</version></dependency>
</dependencies>

上述代码,我们称之为“坐标”,也就是唯一的。

在Maven中,根据groupId、artifactId、version的配置,来唯⼀识别⼀个 jar 包,缺⼀不可. 当我们在pom⽂件中配置完依赖之后,点击刷新,Maven会根据坐标的配置,去仓库⾥寻找Jar包,并把他 下载下来,添加到项⽬中。

这个Jar包下载的地⽅就称为仓库。 仓库:⽤于存储资源,管理各种jar包。

Maven仓库的本质就是⼀个目录(文件夹),这个目录被用来存储开发中所有依赖(jar包,插件等)。

 

Maven仓库分为两大类:本地仓库和远程仓库.其中远程仓库又分为中央仓库,私服和其他公共库。

 1.5.1 本地仓库

本地仓库:自己计算机上的一个目录(用来存储jar包)。

本地仓库地址可以通过Maven配置查看:

 

查看该仓库⽬录,可以看到该⽬录下有很多的jar(最开始是空的,随着Maven的使⽤,该仓库下⽂件会越来越多)。

当项目中引入对应依赖jar包后,首先会查找本地仓库中是否有对应的jar包。如果有,则在项目中直接引用;如果没有,则去中央仓库中下载对应的jar包到本地仓库。

1.5.2 中央仓库

中央仓库:Maven软件中内置一个远程仓库地址,就是中央仓库,服务于整个互联网,由maven团队维护,全球唯一。

仓库地址:https://repo1.maven.org/maven2/

可以通过https://mvnrepository.com这个⽹站来查询并下载。

 查找jar的坐标

1)访问 https://mvnrepository.com/

2)进行查找,比如mysql

 

3)选择要添加的jar包版本

 

4)查看jar包对应坐标

 

jar包版本的选择:

1.5.3 私有服务器(私服)

私服:一般由公司团队搭建的私有仓库。

 私服属于某个公司,或者某个部门,往往需要一定权限。有了私服,Maven依赖下载的顺序又发生了变化。

当Maven需要下载资源的时候

1. 先从本地仓库获取,本地仓库存在,则直接返回

2. 如果本地仓库没有,就从私服请求,私服存在该资源,就直接返回

3. 如果私服上不存在该资源,则从中央仓库下载,中央仓库不存在,就报错了... 

4. 如果中央仓库中存在,就先缓存在私服上之后,再缓存到本地仓库⾥,再为Maven的下载请求提供服务

私服是很多⼈在使⽤的,所以只需要第⼀个使⽤者下载⼀次就可以了。

1.6 Maven设置国内源

因为中央仓库在国外,所以下载起来会比较慢,我们可以选择借助国内一些公开的远程仓库来下载资源。

1.6.1 配置当前项目settings

1) file >> settings 查看配置文件的地址

2)配置国内源

打开settings.xml文件,在mirrors节点上,添加内容(没有settings文件可以自己在网上查找并保存):

<mirror><id>aliyunmaven</id><mirrorOf>central</mirrorOf><name>阿⾥云公共仓库</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>

 1.6.2 设置新项目的setting(idea专业版不需要)

上述配置的内容,只对当前项目生效,为了让后续新建的项目也生效,需要重新设置以下新项目的settings。

当前项⽬和新项⽬共⽤⼀个setttings⽂件即可,所以新项⽬的设置,只需要确认⼀下settings⽂件的路径即可。

 

2.SpringBoot介绍  

2.1 认识Spring

学习SpringBoot之前先认识Spring~

Spring两个含义:

  1. 一个是Spring家族,全家桶;
  2. 另一个指Spring Core,也就是Spring Framework。

上述是Spring官⽅(https://spring.io/)的介绍。

可以看到,Spring让Java程序更加快速,简单和安全.Spring对于速度、简单性和⽣产⼒的关注使其成为 世界上最流⾏的Java框架。

Spring官⽅提供了很多开源的项⽬,覆盖范围从Web开发到⼤数据,Spring发展到了今天,已经形成了⾃ ⼰的⽣态圈.我们在开发时,也倾向于使⽤Spring官⽅提供的技术,来解决对应的问题。

这些项目都是基于Spring Framework来进行开发的。但是Spring Framework存在配置多, ⼊⻔难的问题, Spring 也意识到了这个问题, 为了简化开发者的使⽤,从⽽创造性的推出了SpringBoot。

Spring Boot 的诞生是为了简化 Spring 程序开发的

 Spring Boot就是 Spring 框架的脚⼿架,它是为了快速开发 Spring 框架⽽诞⽣的。

 2.2 Spring Boot 项目搭建

1)File >> New >> Project

(不同版本的idea界面显示可能会有不同)

2)点击Next

 3)点击Create就完成 Spring Boot 的项目创建了。

  注意事项

第⼀次打开Spring Boot 项⽬需要加载很久,因为当前Spring Boot 框架并没有在⾃⼰的本地仓库。为了加速Spring Boot 项⽬的下载,在打开项⽬之前,请先确认⾃⼰的 Maven 已经配置为国内源。

2.3 项目代码和目录介绍

1)项目代码

观察pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.2</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>org.example</groupId><artifactId>demo</artifactId><version>0.0.1-SNAPSHOT</version><name>demo</name><description>demo</description><url/><licenses><license/></licenses><developers><developer/></developers><scm><connection/><developerConnection/><tag/><url/></scm><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

pom.xml⽂件⾥的具体信息,不需要过度关注,我们主要看标签⾥⾯的内容:

pom⽂件中,引⼊了两个依赖:

• spring-boot-starter-web:包含了web应⽤开发所需要的常⻅依赖

• spring-boot-starter-test:包含了单元测试所需要的常⻅依赖

父工程

这个依赖没有指定具体的版本号,但我们的jar包也正常引入到项目中,并且查看也有版本号。

 同时,本地仓库的jar包也下载下来了~

为什么没有指定 <version>,程序也可以正常运行呢?

因为每一个SpringBoot工程,都有一个父工程,依赖的版本号,在⽗⼯程中统⼀管理。⽗⼯程指定版本号后,就会⾃动引⼊和所指定版本对应的依赖,创建的SpringBoot项⽬,会继承 SpringBoot⽗⼯程。

 2)目录介绍

Spring Boot项目主要有两个主要的目录:

  • src/main/java:Java源代码
  • src/main/resources:为静态资源或配置文件 -->> 1./static:静态资源文件夹,有js,css,html等静态文件,不需要服务器数据进行绑定的页面;2. /templates:板块资源文件夹,主要存放动态模板文件,比如JSP,Freemarker,Thymeleaf等需要服务器动态渲染数据的文件
  • src/main/test:测试代码源代码
  • target:编译后的文件路径
  • pom.xml:maven配置文件

2.4 启动项目

点击启动类的main方法就可以运行SpringBoot项目。

2.5 输出hello world

⽤ Spring Boot 来实现和浏览器及用户的交互。

在创建的项目包路径下创建UserController的java文件,实现代码如下:

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class UserController {@RequestMapping("/sayHi")public String say() {return "hello Spring Boot ~";}
}

重新启动项目,访问 http://127.0.0.1:8080/sayHi 最终的效果如下:

以上 ,是对 Spring Boot 的一个简单认识~


😊

相关文章:

JavaEE - Spring Boot 简介

1.Maven 1.1 什么是Maven 翻译过来就是: Maven是⼀个项⽬管理⼯具。基于POM(Project Object Model,项⽬对象模型)的概念&#xff0c;Maven可以通 过⼀⼩段描述信息来管理项⽬的构建&#xff0c;报告和⽂档的项⽬管理⼯具软件。 可以理解为&#xff1a;Maven是一个项目管理工具…...

SwiftUI革新:Xcode UI开发的新纪元

SwiftUI革新&#xff1a;Xcode UI开发的新纪元 SwiftUI作为Apple推出的声明式UI框架&#xff0c;彻底改变了在Xcode中构建用户界面的方式。它不仅简化了代码&#xff0c;还提高了开发效率&#xff0c;并且使得UI设计更加直观和灵活。本文将深入探讨如何在Xcode中使用SwiftUI进…...

22、基于共享内存的数据结构——用十个块来提高并发性

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 为了提高并发性&#xff0c;把…...

【ffmpeg命令入门】实现画中画

文章目录 前言画中画是什么画中画的外观描述效果展示为什么要用画中画应用场景示例 使用FFmpeg添加画中画示例命令参数解释调整嵌入视频的位置调整嵌入视频的大小处理音频 总结 前言 FFmpeg 是一款强大的多媒体处理工具&#xff0c;广泛用于音视频的录制、转换和流处理。它不仅…...

基于 LangChain+LangGraph 来实现一个翻译项目

相信大家在看文档的时候&#xff0c;有时会比较苦恼&#xff0c;比如 AI 相关的文档都是外文&#xff0c;中文文档比较少&#xff0c;看起来会比较吃力&#xff0c;有的时候会看不懂&#xff0c;翻译软件又翻得很乱&#xff0c;完全看不了&#xff0c;今天就基于 LangChain 和 …...

javascript 如何将 json 格式数组转为 excel 表格| sheetJS

案例 // https://unpkg.com/xlsx0.18.5/dist/xlsx.full.min.js function exportXlsx(jsonData, fileName , mine null) {const workbook XLSX.utils.book_new();// 将JSON数组转换成工作表const worksheet XLSX.utils.json_to_sheet(jsonData);// 向工作簿添加工作表XLSX.…...

网页制作技术在未来会如何影响人们的生活?

网页制作技术在未来会如何影响人们的生活&#xff1f; 李升伟 网页制作技术在未来可能会从以下几个方面显著影响人们的生活&#xff1a; 1. 工作与学习方式的变革&#xff1a;远程办公和在线教育将更加普及和高效。通过精心制作的网页&#xff0c;人们能够实现更便捷的协作…...

【计算机网络】网络层——IPv4地址(个人笔记)

学习日期&#xff1a;2024.7.24 内容摘要&#xff1a;IPv4地址&#xff0c;分类编址&#xff0c;子网&#xff0c;无分类编址 IPv4地址概述 在TCP/IP体系中&#xff0c;IP地址是一个最基本的概念&#xff0c;IPv4地址就是给因特网上的每一台主机的每一个接口分配一个在全世界…...

c++ 学习笔记之多线程:线程锁,条件变量,唤醒指定线程

基于CAS线程加锁方式 CAS&#xff08;Compare-And-Swap&#xff09;和 mutex 都是用于实现线程安全的技术&#xff0c;但它们适用于不同的场景&#xff0c;具有不同的性能和复杂性。下面是对两者的区别和使用场景的详细解释&#xff1a; CAS&#xff08;Compare-And-Swap&…...

《0基础》学习Python——第二十三讲__网络爬虫/<6>爬取哔哩哔哩视频

一、在B站上爬取一段视频&#xff08;B站视频有音频和视频两个部分&#xff09; 1、获取URL 注意&#xff1a;很多平台都有反爬取的机制&#xff0c;B站也不例外 首先按下F12找到第一条复制URL 2、UA伪装&#xff0c;下列图片中&#xff08;注意代码书写格式&#xff09; 3、Co…...

第13周 简历职位功能开发与Zookeeper实战

第13周 简历职位功能开发与Zookeeper实战 本章概述1. Mysql8窗口函数over使用1.1 演示表结构与数据1.2 案例1:获取男女总分数1.3 案例2****************************************************************************************本章概述 1. Mysql8窗口函数over使用 参考案例…...

什么是大型语言模型 (LLM)

本章探讨下&#xff0c;人工智能如何彻底改变我们理解和与语言互动的方式 大型语言模型 (LLM) 代表了人工智能的突破&#xff0c;它采用具有广泛参数的神经网络技术进行高级语言处理。 本文探讨了 LLM 的演变、架构、应用和挑战&#xff0c;重点关注其在自然语言处理 (NLP) 领…...

【人工智能】AI时代:探索个人潜能的新视角

文章目录 &#x1f34a;Al时代的个人发展1 AI的高速发展意味着什么1.1 生产力大幅提升1.2 生产关系的改变1.3 产品范式1.4 产业革命1.5 Al的局限性1.5.1局限一:大模型的幻觉1.5.2 局限二&#xff1a;Token 2 个体如何应对这种改变?2.1 职场人2.2 K12家长2.3 大学生2.4 创业者 …...

pyaudio VAD通过声音音频值分贝大小检测没人说话自动停止录制

效果可能说话声音小可能不被监听到,需要更改QUIET_DB阈值,另外delay_time值是低于阈值多久就可以停止保存当前的语音 import pyaudio import waveimport sys import numpy as npdef record_auto(MIC_INDEX=1):开启麦克风录音,保存至temp/speech_record.wav音频文件音量超过…...

《后端程序猿 · @Value 注释说明》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…...

【LeetCode】71.简化路径

1. 题目 2. 分析 3. 代码 我写了一版很复杂的代码&#xff1a; class Solution:def simplifyPath(self, path: str) -> str:operator [] # 操作符的栈dir_name [] # 文件名的栈idx 0cur_dir_name ""while(idx < len(path)):if path[idx] /:operator.ap…...

DockerCompose 安装环境

1. Redis version: 3 services:redis:image: redis:6.2.12container_name: redisports:- "6379:6379"environment:TZ: Asia/Shanghaivolumes:# 本地数据目录要先执行 chmod 777 /usr/local/docker/redis/data 赋予读写权限&#xff0c;否则将无法写入数据- /usr/loc…...

学习笔记之JAVA篇(0724)

p 方法 方法声明格式&#xff1a; [修饰符1 修饰符2 ...] 返回值类型 方法名&#xff08;形式参数列表&#xff09;{ java语句;......; } 方法调用方式 普通方法对象.方法名&#xff08;实参列表&#xff09;静态方法类名.方法名&#xff08;实参列表&#xff09; 方法的详…...

【Android】广播机制

【Android】广播机制 前言 广播机制是Android中一种非常重要的通信机制&#xff0c;用于在应用程序之间或应用程序的不同组件之间传递信息。广播可以是系统广播&#xff0c;也可以是自定义广播。广播机制主要包括标准广播和有序广播两种类型。 简介 在Android中&#xff0c…...

【.NET全栈】ASP.NET开发Web应用——ASP.NET数据绑定技术

文章目录 前言一、绑定技术基础1、单值绑定2、重复值绑定 二、数据源控件1、数据绑定的页面生存周期2、SqlDataSource3、使用参数过滤数据4、更新数据和并发处理5、编程执行SqlDataSource命令6、ObjectDataSource控件介绍7、创建业务对象类8、在ObiectDataSource中使用参数9、使…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

Bean 作用域有哪些?如何答出技术深度?

导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障

关键领域软件测试的"安全密码"&#xff1a;Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力&#xff0c;从金融交易到交通管控&#xff0c;这些关乎国计民生的关键领域…...

redis和redission的区别

Redis 和 Redisson 是两个密切相关但又本质不同的技术&#xff0c;它们扮演着完全不同的角色&#xff1a; Redis: 内存数据库/数据结构存储 本质&#xff1a; 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能&#xff1a; 提供丰…...

DiscuzX3.5发帖json api

参考文章&#xff1a;PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下&#xff0c;适配我自己的需求 有一个站点存在多个采集站&#xff0c;我想通过主站拿标题&#xff0c;采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...