SpringBoot-1-Spring Boot实战:快速搭建你的第一个应用,以及了解原理

SpringBoot-1-Spring Boot实战:快速搭建你的第一个应用,以及了解原理

今日内容

SpringBootWeb入门

前言

我们在之前介绍Spring的时候,已经说过Spring官方(Spring官方)提供很多开源项目,点击projects,看到spring家族旗下的项目

Spring发展到今天已经形成了一种开发生态圈,Spring提供了若干个子项目,每个项目用于完成特定的功能。而我们在项目开发时,一般会偏向于选择这一套spring家族的技术,来解决对应领域的问题,那我们称这一套技术为spring全家桶

而Spring家族旗下这么多的技术,最基础、最核心的是 SpringFramework。其他的spring家族的技术,都是基于SpringFramework的,SpringFramework中提供很多实用功能,如:依赖注入、事务管理、web开发支持、数据访问、消息服务等等。

在之前学习Spring的时候我们发现,学习Spring,存在以下问题:

  • 配置繁琐

  • 入门难度大。

所以,spring官方推荐我们从另外一个项目开始学习,那就是目前最火爆的SpringBoot。

通过springboot就可以快速的帮我们构建应用程序,有以下有点 :

  • 创建独⽴(stand-alone)的Spring应⽤

SpringBoot就可以创建独⽴的Spring应⽤,它⽐⽤原⽣的SpringFramework开发的应⽤更简单,配置 更少。

  • 内嵌(embed)web服务器

以前开发web应⽤,会把项⽬打成war包,然后部署到外部Tomcat运⾏项⽬。现在直接运⾏jar包即 可。

  • 提供可选的(optinionated)start依赖,简化构建配置

启动器start,可以引⼊该场景下所有的包依赖,并且多个jar包对应的版本也帮我们选择好了。

  • ⾃动配置Spring以及第三⽅功能

以前开发Spring项⽬,有很多常规配置需要配置,并且引⼊其他技术时,都伴随着⼤量的配置需要⼿ 动执⾏。那么,有了⾃动配置后,这些都不需要⾃⼰去配置了,我们建⽴好SpringBoot项⽬后,可以 直接⾯向业务代码开发,⽽不必被⼤量配置所困扰了。

  • 完全不需要代码⽣成,也不需要 XML 配置

SpringBoot是整合Spring⽣态圈技术栈的⼀站式框架

SpringBoot是简化Spring技术栈的快速开发脚⼿架

SpringBoot迭代快,变化快。切封装很深,内部原理复杂,不容易精通。

  • 提供⽣产级别(production-ready)的特性,例如:指标、运⾏状况检查和外部化配置

SpringBoot⾃带了⽣产级别的指标和运⾏状况检查,可以帮助我们了解服务运⾏的最新状况。并且, 当我们需要修改某些配置的时候,也不需要直接在项⽬源码上进⾏修改了,可以通过外部化配置,就 可以将修改⽣效。

总结:Spring Boot 可以帮助我们非常快速的构建应用程序、简化开发、提高效率 。

1. SpringBootWeb快速入门

1.1 需求

需求:基于SpringBoot的方式开发一个web应用,浏览器发起请求/study,给浏览器返回字符串 跟着SpringBoot葵花宝典学习SpringBoot

1.2 开发步骤

第1步:创建SpringBoot工程项目

第2步:定义HelloController类,添加方法hello,并添加注解

第3步:测试运行

1.2.1 创建SpringBoot工程(需要联网)

基于Spring官方骨架,创建SpringBoot工程。

基本信息描述完毕之后,勾选web开发相关依赖。

点击Finish之后,就会联网创建这个SpringBoot工程,创建好之后,结构如下:

  • ==注意:在联网创建过程中,会下载相关资源(请耐心等待)==

1.2.2 定义请求处理类

在com.itheima这个包下创建一个子包controller,并创建一个类:StudentController

package com.zbbmeta.controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class StudentController {@RequestMapping("/study")public String study(){return "根据SpringBoot葵花宝典学习SpringBoot";}
}

1.2.3 运行测试

运行SpringBoot自动生成的引导类

打开浏览器,输入 http://localhost:8080/study

2 SpringBoot项目创建方式

之前我们创建的SpringBoot入门案例,演示了SpringBoot项目如何创建,现在具体介绍SPringBoot有哪些创建方式

2.1 SpringBoot项目创建(一)

Spring官方骨架,可以理解为Spring官方为程序员提供一个搭建项目的模板。

2.2 SpringBoot项目创建(二)

如果Idea不能正常联网,这个SpringBoot程序就无法制作了吗?开什么玩笑,世上IDE工具千千万,难道SpringBoot技术还必须基于Idea来做了?这是不可能的。开发SpringBoot程序,可以不基于任意的IDE工具进行,其实在SpringBoot的官网里面就可以直接创建SpringBoot程序 SpringBoot官网和Spring的官网是在一起的,都是 spring.io 。你可以通过项目一级一级的找到SpringBoot技术的介绍页,然后在页面中间部位找到如下内容 我们可以通过访问:https://start.spring.io/ ,进入到官方骨架页面

步骤一

点击Spring Initializr后进入到创建SpringBoot程序的界面上,下面是输入信息的过程,和前面的一样,只是界面变了而已,根据自己的要求,在左侧选择对应信息和输入对应的信息即可

步骤二

右侧的ADD DEPENDENCIES用于选择使用何种技术,和之前勾选的Spring WEB是在做同一件事,仅仅是界面不同而已,点击后打开网页版的技术选择界面

步骤三

所有信息设置完毕后,点击下面左侧按钮,生成一个文件包

步骤四

解压缩后,就会得到一个SpringBoot项目工程

打开pom.xml文件,我们可以看到springboot项目中引入了web依赖和test依赖

结论:不论使用IDEA创建SpringBoot项目,还是直接在官方网站利用骨架生成SpringBoot项目,项目的结构和pom.xml文件中内容是相似的。

2.3 SpringBoot项目创建(三)

步骤一:创建工程时,选择手工创建Maven工程

步骤二:参照标准SpringBoot工程的pom文件,书写自己的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 http://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>2.7.14</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.zbbmeta</groupId><artifactId>d15-3-springboot-quickstart</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies></project>

步骤三:创建启动类

package com.zbbmeta;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class QuickStartApplication {public static void main(String[] args) {SpringApplication.run(QuickStartApplication.class,args);}
}

4 起步依赖

在我们之前讲解的SpringBoot快速入门案例中,同样也引用了:web依赖和test依赖

spring-boot-starter-web和spring-boot-starter-test,在SpringBoot中又称为:起步依赖

而在SpringBoot的项目中,有很多的起步依赖,他们有一个共同的特征:就是以spring-boot-starter-作为开头。只要看见spring-boot-starter-xxx这类的依赖,都为起步依赖

起步依赖有什么特殊之处呢,这里我们以入门案例中引入的起步依赖做为讲解:

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

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

spring-boot-starter-web内部把关于Web开发所有的依赖都已经导入并且指定了版本,只需引入 spring-boot-starter-web 依赖就可以实现Web开发的需要的功能

Spring的官方提供了很多现成的starter(起步依赖),我们在开发相关应用时,只需要引入对应的starter即可。

官方地址:https://docs.spring.io/spring-boot/docs/2.7.14/reference/htmlsingle/#using.build-systems.starters

每一个起步依赖,都用于开发一个特定的功能。

举例:当我们开发中需要使用redis数据库时,只需要在SpringBoot项目中,引入:spring-boot-starter-redis ,即可导入redis开发所需要的依赖。

5 SpringBoot父工程

思考:为什么我们我们通过maven引入的依赖,是没有指定具体的依赖版本号的。

为什么没有指定version版本号,可以正常使用呢?

因为每一个SpringBoot工程,都有一个父工程。依赖的版本号,在父工程中统一管理。

总结

  1. 开发SpringBoot程序需要导入坐标时通常导入对应的starter

  2. 每个不同的starter根据功能不同,通常包含多个依赖坐标

  3. 使用starter可以实现快速配置的效果,达到简化配置的目的

6. 引导类

配置说完了,我们发现SpringBoot确实帮助我们减少了很多配置工作,下面说一下程序是如何运行的。目前程序运行的入口就是SpringBoot工程创建时自带的那个类了,带有main方法的那个类,运行这个类就可以启动SpringBoot工程的运行

@SpringBootApplication
public class D151SpringbootQuickstartApplication {public static void main(String[] args) {SpringApplication.run(D151SpringbootQuickstartApplication.class, args);}
}

SpringBoot本身是为了加速Spring程序的开发的,而Spring程序运行的基础是需要创建自己的Spring容器对象(IoC容器)并将所有的对象交给Spring的容器管理,也就是一个一个的Bean。SpringBoot加速开发Spring程序,这个容器还在吗,这个疑问不用说,一定在。当前这个类运行后就会产生一个Spring容器对象,并且可以将这个对象保存起来,通过容器对象直接操作Bean。

@SpringBootApplication
public class D151SpringbootQuickstartApplication {public static void main(String[] args) {ConfigurableApplicationContext ctx = SpringApplication.run(D151SpringbootQuickstartApplication.classargs);StudentController bean = ctx.getBean(StudentController.class);System.out.println("bean = =======================" + bean);}
}

通过上述操作不难看出,其实SpringBoot程序启动还是创建了一个Spring容器对象。这个类在SpringBoot程序中是所有功能的入口,称这个类为引导类

作为一个引导类最典型的特征就是当前类上方声明了一个注解@SpringBootApplication

总结

  1. SpringBoot工程提供引导类用来启动程序

  2. SpringBoot工程启动后创建并初始化Spring容器

思考

程序现在已经运行了,通过引导类的main方法运行了起来。但是运行java程序不应该是执行完就结束了吗?但是我们现在明显是启动了一个web服务器啊,不然网页怎么能正常访问呢?这个服务器是在哪里写的呢?

7 内嵌Tomcat

问题:为什么我们之前书写的SpringBoot入门程序中,并没有把程序部署到Tomcat的webapps目录下,也可以运行呢?

原因呢,是因为在我们的SpringBoot中,引入了web运行环境(也就是引入spring-boot-starter-web起步依赖),其内部已经集成了内置的Tomcat服务器。

我们可以通过IDEA开发工具右侧的maven面板中,就可以看到当前工程引入的依赖。其中已经将Tomcat的相关依赖传递下来了,也就是说在SpringBoot中可以直接使用Tomcat服务器。

当我们运行SpringBoot的引导类时(运行main方法),就会看到命令行输出的日志,其中占用8080端口的就是Tomcat。

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

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

相关文章

【前端】深入解析CSS:选择器、显示模式、背景属性和特征剖析

目录 一、前言二、CSS的复合选择器1、后代选择器①、语法②、注意事项 2、子选择器①、语法②、注意事项 3、并集选择器①、语法②、注意事项 4、链接伪类选择器①、语法②、注意事项 三、CSS元素显示模式转换1、转换为块元素display:block2、转换为行内元素display:inline3、转…

带您解读DeepBook经济原理

DeepBook是Sui上的第一个原生流动性层&#xff0c;通过Sui可预测且低廉的gas费&#xff0c;将促进DeepBook上的大规模交易活动。鉴于DeepBook的中央限价订单簿&#xff08;Central Limit Order Book&#xff0c;CLOB&#xff09;架构&#xff0c;交易量越大&#xff0c;资产价格…

java gradle 项目 在idea上 搭建一个简单的thrift实例

前言 Thrift是RPC通信的一种方式&#xff0c;可以通过跨语言进行通信&#xff0c;最近项目需要进行跨语言的通信&#xff0c;因此首先尝试搭建了一个简单的thrift框架&#xff0c;因为网上的实例大都参差不全&#xff0c;通过gpt查询得到的结果对我帮助更大一点&#xff0c;但…

通信原理 | 窗函数 | 矩形窗 | 汉宁窗 | 汉明窗 | 布莱克曼窗 | 补零对频谱的影响

文章目录 矩形窗矩形窗的时域表达式N=32的时域图N=32的频域图时域补零后的时域序列时域补零后的频域序列时域补零到序列长度为4096,对应的频域序列纵轴取对数汉宁窗N=32的情况下的时域序列N=32的频域图时域补零后的时域序列和对应频域序列时域补零到序列长度为4096,对应的频域…

CentOS KVM虚拟安装和开机启动

1. 配置系统 关闭SELinux setenforce 0持久化关闭配置 vi /etc/selinux/config2. 安装虚拟化软件 安装 KVM、QEMU等虚拟化软件。 yum install qemu-kvm qemu-img virt-manager libvirt virt-install virt-viewer 检查LVM模块是否已经加载 lsmod |grep kvm设置开机启动 s…

回归预测 | MATLAB实现GWO-BP灰狼算法优化BP神经网络多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现GWO-BP灰狼算法优化BP神经网络多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现GWO-BP灰狼算法优化BP神经网络多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览基本介绍程序…

零基础如何使用IDEA启动前后端分离中的前端项目(Vue)?

一、在IDEA中配置vue插件 点击File-->Settings-->Plugins-->搜索vue.js插件进行安装&#xff0c;下面的图中我已经安装好了 二、搭建node.js环境 安装node.js 可以去官网下载&#xff1a;安装过程就很简单&#xff0c;直接下一步就行 测试是否安装成功&#xff1a;要…

JavaScript如何实现数据的深拷贝、浅拷贝?

原文合集地址如下&#xff0c;有需要的朋友可以关注 本文地址 什么是深浅拷贝 说到深浅拷贝就得提起JavaScript中的数据类型之前的文章中有介绍过&#xff0c;这里就不再细说了。 浅拷贝&#xff1a;对基本数据类型进行值复制,对引用数据类型复制引用地址。浅拷贝会创建一个…

队列(Queue):先进先出的数据结构队列

栈与队列https://blog.csdn.net/qq_45467165/article/details/127958960?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22127958960%22%2C%22source%22%3A%22qq_45467165%22%7D 队列&#xff08;Queue&#xff09;是一种常见的线…

Apache Shiro是什么

特点 Apache Shiro是一个强大且易用的Java安全框架,用于身份验证、授权、会话管理和加密。它的设计目标是简化应用程序的安全性实现,使开发人员能够更轻松地处理各种安全性问题,从而提高应用程序的安全性和可维护性。下面是一些Apache Shiro的关键特点和概念: 特点和概念…

【芯片设计封装与测试】芯片测试目的、方法、分类及案例

目录 1.芯片测试概述&#xff08;目的、方法&#xff09; 1.1.测试在芯片产业价值链上的位置 2.测试如何体现在设计的过程中 2.1.半导体测试定义与基本工作机制 2.2.半导体测试环节分类及对应设备 2.3.设计验证 3.测试的各种类型 3.1.抽样测试和生产全测 3.2.测试相关…

controller层如何接收带参数的查询

在控制器&#xff08;Controller&#xff09;层接收带参数的查询可以通过多种方式实现。以下是几种常见的方法&#xff1a; 使用 URL 路径参数&#xff1a;将参数作为 URL 的一部分&#xff0c;例如 /users/{userId}。在 Spring MVC 中&#xff0c;您可以使用 PathVariable 注解…

Mysql知识梳理

Mysql知识梳理 索引索引分类索引未命中的原因性能调优命令Explain回表 mysql性能优化事务四大特性事务隔离级别设置事务隔离级别 存储引擎聚簇索引和非聚簇索引聚簇索引非聚簇索引 最左前缀结合原则全文索引 索引 索引分类 mysql有普通索引、空间索引、主键索引、唯一索引、组…

高忆管理:股市交易时间和规则?

股市是指股票买卖商场&#xff0c;出资者买卖股票来获取出资回报。买卖时刻和规矩是股票商场的核心&#xff0c;它约束了股票价格的改变和买卖者的行为。那么&#xff0c;股市的买卖时刻和规矩是什么&#xff1f;咱们应该怎么了解和运用它们来出资&#xff1f; 一、股市买卖时刻…

集成放大器 电路 分析 设计过程中的概念和要点

集成运放的三大特性&#xff1a;虚短、虚断、 和 虚地把这几个特性理解明白了&#xff0c; 后面的电路分析就很容易上手。 虚短&#xff1a;UPUN&#xff0c;两输入端电压相等。虚断&#xff1a;IPIN0&#xff0c;两输入端的输入电流为0。虚地&#xff1a;UPUN0&#xff0c…

Python Scrapy网络爬虫框架从入门到实战

Python Scrapy是一个强大的网络爬虫框架&#xff0c;它提供了丰富的功能和灵活的扩展性&#xff0c;使得爬取网页数据变得简单高效。本文将介绍Scrapy框架的基本概念、用法和实际案例&#xff0c;帮助你快速上手和应用Scrapy进行数据抓取。 Scrapy是一个基于Python的开源网络爬…

软考高级系统架构设计师系列之:论文典型试题写作要点和写作素材总结系列文章三

软考高级系统架构设计师系列之:论文典型试题写作要点和写作素材总结系列文章三 一、论Web Service 技术的应用与发展趋势1.论文题目2.写作要点和写作素材二、论系统的可靠性1.论文题目2.写作要点和写作素材三、论软件可靠性设计与应用1.论文题目2.写作要点和写作素材四、论软件…

17.1.2 【Linux】systemd使用的unit分类

systemd 有什么好处&#xff1f; 平行处理所有服务&#xff0c;加速开机流程&#xff1a; 旧的 init 启动脚本是“一项一项任务依序启动”的模式&#xff0c;因此不相依的服务也是得要一个一个的等待。但目前我们的硬件主机系统与操作系统几乎都支持多核心架构了&#xff0c;s…

【路由器】小米 WR30U 解锁并刷机

文章目录 解锁 ssh环境准备解锁过程 刷入 mt798x uboot简介刷入流程 刷入 ImmortalWrt简介刷入流程 刷为原厂固件参考资料 本文主要记录个人对小米 WR30U 路由器的解锁和刷机过程&#xff0c;整体步骤与 一般安装流程 类似&#xff0c;但是由于 WR30U 的解锁 ssh 和刷机的过程中…

【AWS】安装配置适用于 Eclipse 的 AWS 工具包

目录 0.环境 1.步骤 1&#xff09;安装Eclipse 2&#xff09;安装AWS工具包 ① 在这个路径下点开安装软件的界面 ② 点击【Add】打开添加窗口 ③ 输入aws的工具包地址 ④ 勾选需要的工具&#xff0c;点击【Next】 ⑤ 将要安装的工具&#xff0c;点击【Next】 ⑥ 选择接受…