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

news2024/11/15 20:03:44

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.coloradmin.cn/o/907270.html

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

相关文章

中国CV军团,危矣?!

大数据产业创新服务媒体 ——聚焦数据 改变商业 近期&#xff0c;云从科技发布了2023年半年报。应该说&#xff0c;云从科技交出的成绩单很不好。事实上&#xff0c;商汤、旷视等CV厂商的情况也好不到哪去。云从科技的处境有一定的代表性&#xff0c;因此&#xff0c;我们将通…

Python“牵手”拼多多商品评论数据采集方法,拼多多API申请步骤说明

拼多多平台API接口是为开发电商类应用程序而设计的一套完整的、跨浏览器、跨平台的接口规范&#xff0c;拼多多API接口是指通过编程的方式&#xff0c;让开发者能够通过HTTP协议直接访问拼多多平台的数据&#xff0c;包括商品信息、店铺信息、物流信息&#xff0c;评论数据等&a…

国内常见的几款可视化Web组态软件

组态软件是一种用于控制和监控各种设备的软件&#xff0c;也是指在自动控制系统监控层一级的软件平台和开发环境。这类软件实际上也是一种通过灵活的组态方式&#xff0c;为用户提供快速构建工业自动控制系统监控功能的、通用层次的软件工具。通常用于工业控制&#xff0c;自动…

机器学习分类,损失函数中为什么要用Log,机器学习的应用

目录 损失函数中为什么要用Log 为什么对数可以将乘法转化为加法&#xff1f; 机器学习&#xff08;Machine Learning&#xff09; 机器学习的分类 监督学习 无监督学习 强化学习 机器学习的应用 应用举例&#xff1a;猫狗分类 1. 现实问题抽象为数学问题 2. 数据准备…

Electron 报gpu_process_host.cc(951)] GPU process launch faile错误

解决方法&#xff0c;在入口js文件中&#xff0c;添加如下代码: app.commandLine.appendSwitch(no-sandbox)

Vulhub之Shiro篇

CVE-2010-3863--认证绕过 1、启动靶机 在终端里进入事先进入准备好的vulhub靶场目录下 cd /vulhub-master/shiro/CVE-2010-3863 sudo docker-compose up -d 2、直接请求管理页面/admin&#xff0c;无法访问&#xff0c;将会被重定向到登录页面 3、构造恶意请求/./admin&…

Nvidia Jetson 编解码开发(5)Jetpack 5.x版本Multimedia API 硬件编码开发

1.前言 基于之前的开发程序 Nvidia Jetson 编解码开发(2)Jetpack 4.x版本Multimedia API 硬件编码开发--集成encode模块_free-xx的博客-CSDN博客 开发版本是基于JetPack 4.x版本 现在需要迁移到JetPack 5.x版本(新发布的Orin/Orin NX/Orin Nano都是JetPack 5.x版本) 尝…

Arch Linux 开发人员近日发布了 Archinstall 2.6

导读经过几个月的努力&#xff0c;Arch Linux 开发人员近日发布了 Archinstall 2.6&#xff0c;作为 Arch Linux 官方文本模式安装程序的最新稳定版本&#xff0c;它带来了几个新功能和许多改进。 Archinstall 2.6 支持 Hyperland 自定义动态平铺 Wayland 窗口管理器&#xff0…

Python在文件中对字母、单词频度统计

读入给定的文本文件“hamlet.txt”&#xff0c;编写两个函数分别实现: 1) 统计所有字母的出现频度,依据频度从高到低&#xff0c;显示前5个字母及其频度&#xff0c;同时把结果写入文件“hamlet_字母频度.txt”。 2) 统计所有单词的出现频度,依据频度从高到低&#xff0c;显示…

数据结构作业——哈夫曼树

/*【基本要求】 &#xff08;1&#xff09; 从文件中读出一篇英文文章&#xff0c;包含字母和空格等字符。 &#xff08;2&#xff09; 统计各个字符出现的频度。 &#xff08;3&#xff09; 根据出现的频度&#xff0c;为每个出现的字符建立一个哈夫曼编码&#xff0c;并输出。…

Open-Cascade 编译全过程-以及注意事项

1.从Github上下载 该源码库; https://github.com/Open-Cascade-SAS/OCCT 2.再从下面网站,下载需要的地方库文件: 从这个地址下载需要的文件&#xff1b; 3rd party Components | Open CASCADE Technology 3.使用cmak gui进行构建编译; 关键地方以及坑所在得点: 如果其编…

打破壁垒,实现高效的跨部门协作与沟通

在如今复杂多变的商业环境下&#xff0c;企业间需要跨越多个部门的壁垒进行协作及沟通以完成企业目标。尽管如此&#xff0c;许多企业仍然面临协作过程中出现不必要的误解、重复、延迟和错失机会等问题。为此&#xff0c;现代技术提供了一些解决方案&#xff0c;其中最为成功的…

【Terraform学习】使用 Terraform 创建Amazon VPC(Terraform-AWS最佳实战学习)

使用 Terraform 创建Amazon VPC 实验步骤 前提条件 安装 Terraform&#xff1a; 地址 下载仓库代码模版 本实验代码位于 task_vpc 文件夹中。 变量文件 variables.tf 在上面的代码中&#xff0c;您将声明&#xff0c;aws_access_key&#xff0c;aws_secret_key和 区域变量…

视频云存储/安防监控EasyCVR视频汇聚平台如何通过角色权限自行分配功能模块?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、…

永久设置pip指定国内镜像源(windows内)

1.首先列出国内四个镜像源网站&#xff1a; 一、清华源 https://pypi.tuna.tsinghua.edu.cn/simple/ 二、阿里源 https://mirrors.aliyun.com/pypi/simple 三、中科大源 https://pypi.mirrors.ustc.edu.cn/simple/ 四、豆瓣源 http://pypi.douban.com/simple/ 2.一般下载所需要…

什么是SaaS、PaaS、aPaaS、iPaaS、IaaS,一文讲透

在数字化的带动下&#xff0c;各行业对云服务的需求进入快速增长期。 SaaS、PaaS、aPaaS、iPaaS、IaaS…… 这些词经常出现&#xff0c;那么他们分别是什么意思&#xff1f;又有什么区别&#xff1f;小帆带大家一起来看看~ SaaS SaaS&#xff0c;Software as a Service&…

数字乡镇综合解决方案[59页PPT]

导读&#xff1a;原文《数字乡镇综合解决方案[59页PPT]》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 喜欢文章&#xff0c;您可以关注评论转发本文&#xff0c;了…

医疗设备管理软件哪家好?医院设备全生命周期管理要怎么做?

随着医学技术的不断进步&#xff0c;医疗设备变得越来越先进&#xff0c;越来越复杂。因此&#xff0c;医疗设备的管理也变得越来越重要。传统的医疗设备管理方式存在很多问题&#xff0c;比如设备数据难统计、报修方式难统一、巡检维保难规范等。为了解决这些问题&#xff0c;…

无畏限制:项目管理中的狠人哲学

引言 在项目管理的领域中&#xff0c;我们经常面临各种限制条件&#xff0c;从时间、资源到预算。但是&#xff0c;真正的“狠人”不会被这些困难所困扰。他们坚信一个简单的哲学&#xff1a;不论遇到什么问题&#xff0c;都要直面它&#xff0c;攻克它。这种直接、简单、无畏…

【二叉树构建与遍历2】后序遍历+中序遍历构建一个二叉树并输出先序遍历 C++实现

思路&#xff1a; 先来一个例子&#xff1a; 后序遍历序列为&#xff1a;XEDGAF 中序遍历序列为&#xff1a;XDEFAG 要根据后序序列和中序序列确定这个二叉树&#xff0c;通用的步骤为&#xff1a; 1.根据后序序列的最后一位确定这棵树的根&#xff1b; 2.在中序序列中找…