SpringBoot-1-Spring Boot实战:快速构建你的第一个应用程序,了解今天内容的原则
前言Springbootweb入门
当我们之前介绍Spring时,我们说Spring官方([Spring官方]提供了许多开源项目。点击projects查看spring家族的项目
随着Spring的发展,Spring已经形成了一个开发生态系统。Spring提供多个子项目,每个项目都用于完成特定功能。当我们开发项目时,我们通常更喜欢选择这套spring家族技术来解决相应领域的问题,所以我们称这套技术为spring家族桶。
Spring家族拥有如此多的技术,最基本、最核心的是 SpringFramework。其他spring家族的技术都是基于springframework。springframework提供了许多实用功能,如依赖注入、事务管理、网络开发支持、数据访问、新闻服务等。
在学习Spring之前,我们发现学习Spring存在以下问题:
- 配置繁琐
- 入门难度大。
因此,spring官方推荐我们从另一个项目开始学习,那就是目前最受欢迎的springboot。
springboot可以快速帮助我们构建应用程序,有以下几点 :
- 创建独⽴(stand-alone)Spring应该⽤
SpringBoot可以独立创建⽴Spring应该⽤,它⽐⽤原⽣SpringFramework开发⽤配置更简单,配置更少。
- 内嵌(embed)web服务器
以前开发web应该⽤,会把项⽬打成war包,然后部署到外部tomcat运输⾏项⽬。现在直接运⾏jar包就可以了。
- 提供可选的(optinionated)start依赖,简化构建配置
可引用启动器start⼊所有的包都依赖于这个场景,多个jar包对应的版本也帮助我们选择。
- ⾃动态配置Spring和第三⽅功能
Spring项目之前开发过⽬,有许多常规配置需要配置,并引导⼊其他技术都伴随着⼤需要数量的配置⼿动执⾏。那么,有了⾃动态配置后,这些都不需要⾃⼰去配置,我们建⽴SpringBooot项目⽬之后,可以直接使用⾯开发业务代码,⽽不必被⼤量配置很麻烦。
- 完全不需要代码⽣成功,也不需要 XML 配置
SpringBoot集成Spring⽣状态技术栈⼀站式框架
SpringBoot是Spring技术栈快速发展的简化⼿架
SpringBoot迭代快,变化快。切割包装深,内部原理复杂,不易精通。
- 提供⽣产级别(production-ready)如指标、运输等特点⾏状态检查和外部配置
SpringBoot⾃带了⽣产级指标及运输⾏状态检查可以帮助我们了解服务运输⾏最新情况。而且,当我们需要修改某些配置时,我们不需要直接在项目中⽬源码上进⾏修改后,可通过外部配置进行修改⽣效。
总结:Spring Boot 它可以帮助我们快速构建应用程序,简化开发,提高效率 。
1. Springbootweb快速入门1.1 需求需求:基于SpringBoot开发web应用程序,浏览器发起请求/study
,将字符串返回浏览器 跟随SpringBoot葵花宝典学习SpringBotot
。
第一步:创建SpringBoot项目
第二步:定义hellocontroller类,添加hello,添加注释
第三步:测试操作
1.2.1 创建SpringBoot项目(需要联网)创建SpringBoot工程,基于Spring官方骨架。
基本信息描述完成后,检查web开发的相关依赖性。
点击Finish后,SpringBot项目将在网上创建。创建后,结构如下:
- ==注:相关资源(请耐心等待)将在网络创建过程中下载==
在com.在itheima的包下创建一个子包controller,并创建一个类别:StudentController
package com.zbbmeta.controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class StudentController { @RequestMapping("/study") public String study(){ return "SpringBoot葵花宝典学习SpringBotot"; }}
1.2.3 运行测试SpringBoot自动生成的指导类
打开浏览器,输入 http://localhost:8080/study
我们之前创建的SpringBoot入门案例展示了如何创建SpringBoot项目,现在详细介绍了SpringBoot的创建方法
2.1 创建SpringBoot项目(1)Spring官方骨架可以理解为Spring官方为程序员提供建设项目的模板。
2.2 创建SpringBoot项目(2)如果Idea不能正常联网,这个SpringBoot程序不能制作吗?开什么玩笑?世界上有成千上万的IDE工具。SpringBoot技术必须基于Idea吗?不可能。SpringBoot程序的开发不能基于任何IDE工具。事实上,SpringBoot程序SpringBoot官网和Spring官网可以直接在SpringBoot官网上创建 spring.io 。SpringBoot技术的介绍页可以通过项目一级一级找到,然后在页面中间找到以下内容。我们可以访问:https://start.spring.io/ ,进入官方骨架页面
步骤一:
点击Spring Initializr进入创建SpringBoot程序的界面。以下是输入信息的过程。和以前一样,只是界面变了。根据自己的要求,选择相应的信息并在左侧输入相应的信息
步骤二:
ADD在右侧 用于选择DEPENDENCIES的技术,以及之前勾选的Spring WEB正在做同样的事情,只是界面不同,点击后打开网页版本的技术选择界面
步骤三:
所有信息设置完成后,单击下面的左按钮生成文件包
步骤四:
解压缩后,将得到SpringBoot项目
打开pom.xml文件,我们可以看到web依赖和test依赖被引入springboot项目
2.3 创建SpringBoot项目(3)结论:无论是使用IDEA创建SpringBoot项目,还是直接在官方网站上使用骨架生成SpringBoot项目,项目的结构和pom.xml文件中的内容相似。
第一步:创建工程时,选择手工创建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;@SpringBootApplicationpublic 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
每一个开始依赖都被用来开发一个特定的功能。
5 springBoot父工程例如:当我们在开发中需要使用redis数据库时,只需在SpringBoot项目中介绍:spring-boot-starter-redis ,可以导入redis开发所需的依赖性。
<span style="color:red">思考:为什么我们通过maven引入的依赖没有指定具体的依赖版本号?</span>
<span style="color:red">为什么version版本号没有指定,可以正常使用?</span>
因为每个SpringBoot项目都有一个父亲项目。所依赖的版本号在父亲项目中统一管理。
总结
- 当SpringBoot程序需要导入坐标时,通常会导入相应的starter
- 根据不同的功能,每个不同的starter通常包含多个依赖坐标
- 使用starter可以达到快速配置的效果,达到简化配置的目的
配置完成后,我们发现SpringBoot确实帮助我们减少了很多配置工作。让我们谈谈程序是如何运行的。目前,程序运行的入口是SpringBoot项目创建时带来的类别。对于带有main方法的类别,可以启动SpringBoot项目的运行
@SpringBootApplicationpublic class D151SpringbotQuictartartaplicationtion { public static void main(String[] args) { SpringApplication.run(D151SpringbotQuictartartaplicationtion.class, args); }}
SpringBoot本身是为了加快Spring程序的开发,Spring程序运行的基础是创建自己的Spring容器对象(IoC容器),并将所有对象交给Spring容器管理,即一个接一个的Bean。SpringBoot加速了Spring程序的开发。这个容器还在吗?不用说,这个问题一定在。目前这类操作后会产生Spring容器对象,可以通过容器对象直接保存和操作Bean。
@SpringBootApplicationpublic class D151SpringbotQuictartartaplicationtion { public static void main(String[] args) { ConfigurableApplicationContext ctx = SpringApplication.run(D151SpringbotQuictartartaplicationtion.class, args); StudentController bean = ctx.getBean(StudentController.class); System.out.println("bean = =======================" + bean); }}
通过以上操作不难看出,SpringBoot程序的启动创建了Spring容器对象。这个类是SpringBoot程序中所有功能的入口,称为这个类<font color="#ff0000"><b>引导类</b></font>。作为一个引导类,最典型的特征是当前类的顶部声明了一个注释。<font color="#ff0000"><b>@SpringBootApplication</b></font>
总结
- SpringBoot项目提供启动程序的指导类
- SpringBoot项目启动后,创建了Spring容器
思考
7 嵌入Tomcat该程序现在已经运行,并通过指导main方法运行。但是java程序的运行不应该在实施后结束吗?但现在我们显然已经启动了web服务器,否则网页怎么能正常访问呢?这个服务器是在哪里写的?
问题:为什么我们之前写的Springboot入门程序没有在Tomcat的webaps目录下部署到tomcat?
原因是web运行环境被引入我们的SpringBoot(即引入spring)-boot-starter-内置的Tomcat服务器已集成到web启动依赖中)。
通过IDEA开发工具右侧的maven面板,我们可以看到当前项目引入的依赖性。Tomcat的相关依赖已经传递下来,也就是说Tomcat服务器可以直接用于Springboot。
当我们运行SpringBoot的指导类(运行main方法)时,我们会看到命令行输出的日志,其中Tomcat占据了8080个端口。