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

猿创征文 |【SpringBoot2】快速上手SpringBoot

🍎个人主页:亮点
🍊个人信条:理想如果不向现实做一点点屈服,那么理想也将归于尘土

文章目录

  • 一、SpringBoot概述
  • 二、创建SpringBoot工程的四种方式
    • 1、基于Idea创建SpringBoot工程
      • (1)步骤:SpringBoot入门程序
      • (2)最简SpringBoot程序所包含的基础文件
        • pom.xml文件
        • Application类
      • (3)Spring程序与SpringBoot程序对比
      • (4)总结
      • (5)Idea中隐藏指定文件或指定类型文件
    • 2、基于SpringBoot官网创建项目
    • 3、基于阿里云创建SpringBoot工程
    • 4、手工创建Maven工程修改为SpringBoot工程
  • 三、SpringBoot的parent、starter、引导类、内嵌tomcat
    • 1、parent
    • 2、starter
    • 3、引导类
    • 4、辅助功能(内嵌tomcat)

一、SpringBoot概述

SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。SpringBoot 是 Spring 项目中的一个子工程,也被称为搭建程序的脚手架,可以快速的构建spring项目。

Spring程序缺点:

  • 依赖设置繁琐
  • 配置繁琐

SpringBoot程序优点:

  • 起步依赖(简化依赖配置)
  • 自动配置(简化常用工程相关配置)
  • 辅助功能(内置服务器,……)

二、创建SpringBoot工程的四种方式

1、基于Idea创建SpringBoot工程

(1)步骤:SpringBoot入门程序

  • ①:创建新模块,选择Spring Initializr,并配置模块相关基础信息(新建模块中没有Spring Initializr选项的解决办法:setting中找到plugins插件,搜索Spring Boot,安装重启)

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

  • ②:选择当前模块需要使用的技术集

在这里插入图片描述

  • ③:开发控制器类
//Rest模式
@RestController
@RequestMapping("/books")
public class BookController {
  @GetMapping
  public String getById(){
    System.out.println("springboot is running...");
    return "springboot is running..."; 
  }
}
  • ④:运行自动生成的Application类

在这里插入图片描述

(2)最简SpringBoot程序所包含的基础文件

pom.xml文件

<?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>2.5.4</version>
   </parent> 
   <groupId>com.itheima</groupId> 
   <artifactId>springboot-01-quickstart</artifactId> 
   <version>0.0.1-SNAPSHOT</version> 
   <dependencies>
     <dependency> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-starter-web</artifactId>
     </dependency>
   </dependencies>
</project>

Application类

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

(3)Spring程序与SpringBoot程序对比

在这里插入图片描述

注意:基于idea开发SpringBoot程序需要确保联网且能够加载到程序框架结构

(4)总结

1. 开发SpringBoot程序可以根据向导进行联网快速制作
2. SpringBoot程序需要基于JDK8进行制作
3. SpringBoot程序中需要使用何种功能通过勾选选择技术
4. 运行SpringBoot程序通过运行Application程序入口进行

(5)Idea中隐藏指定文件或指定类型文件

  • Setting → File Types → Ignored Files and Folders
  • 输入要隐藏的文件名,支持*号通配符
  • 回车确认添加

2、基于SpringBoot官网创建项目

如果idea不能联网,我们可以去spring的官网去创建
地址: https://start.spring.io/(可直接创建)

步骤:

  1. 打开SpringBoot官网,选择Quickstart Your Project(最下边)

  2. 创建工程,并保存项目
    在这里插入图片描述

  3. 解压项目,通过IDE导入项目(与之前相同)

  4. 创建一个Controller测试

3、基于阿里云创建SpringBoot工程

如果网站被限制访问,阿里提供了一个,我们在创建工程时,切换选择starter服务路径,然后手工收入阿里云提供给我们的使用地址

地址: https://start.aliyun.com

步骤:

  1. 选择start来源为自定义URL
  2. 输入阿里云start地址
  3. 创建项目

在这里插入图片描述

阿里云地址默认创建的SpringBoot工程版本是2.4.1,如果需要使用高版本,进入工程后手工切换SpringBoot版本

在这里插入图片描述

4、手工创建Maven工程修改为SpringBoot工程

SpringBoot工程创建的时候就是去下载一些必要的组件的,如果没有网络,把这些东西给提前准备好就可以了

步骤:

  1. 创建普通Maven工程
  2. 继承spring-boot-starter-parent
<?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.1</version>
    </parent>

    <groupId>com.shiyimo</groupId>
    <artifactId>springboot1</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

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

    </dependencies>

</project>

  1. 添加依赖spring-boot-starter-web
<?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>

    <groupId>org.shiyimo</groupId>
    <artifactId>spring4</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.1</version>
    </parent>

    <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>
</project>

  1. 制作引导类Application
package com.itheima;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }
}
  1. 创建一个Controller测试是否能用

三、SpringBoot的parent、starter、引导类、内嵌tomcat

1、parent

pom.xml文件中的<parent> </parent>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.5.4</version>
</parent>

打开后可以查阅到其中又继承了一个坐标

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.5.4</version>
</parent>

点击<artifactId>spring-boot-dependencies</artifactId>打开,可以发现各式各样的依赖版本号属性,可以看的出来,定义了若干个技术的依赖版本号

<properties>
    <activemq.version>5.16.3</activemq.version>
    <aspectj.version>1.9.7</aspectj.version>
    <assertj.version>3.19.0</assertj.version>
    <commons-codec.version>1.15</commons-codec.version>
    <commons-dbcp2.version>2.8.0</commons-dbcp2.version>
    <commons-lang3.version>3.12.0</commons-lang3.version>
    <commons-pool.version>1.6</commons-pool.version>
    <commons-pool2.version>2.9.0</commons-pool2.version>
    <h2.version>1.4.200</h2.version>
    <hibernate.version>5.4.32.Final</hibernate.version>
    <hibernate-validator.version>6.2.0.Final</hibernate-validator.version>
    <httpclient.version>4.5.13</httpclient.version>
    <jackson-bom.version>2.12.4</jackson-bom.version>
    <javax-jms.version>2.0.1</javax-jms.version>
    <javax-json.version>1.1.4</javax-json.version>
    <javax-websocket.version>1.1</javax-websocket.version>
    <jetty-el.version>9.0.48</jetty-el.version>
    <junit.version>4.13.2</junit.version>
</properties>

各式各样的的依赖坐标信息,可以看出依赖坐标定义中没有具体的依赖版本号,而是引用了第一组信息中定义的依赖版本属性值

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>

注意:上面的依赖坐标定义是出现在标签中的,其实是对引用坐标的依赖管理,并不是实际使用的坐标。因此当我们的项目中继承了这组parent信息后,在不使用对应坐标的情况下,前面的这组定义是不会具体导入某个依赖的。

总结:

  1. 开发SpringBoot程序要继承spring-boot-starter-parent

  2. spring-boot-starter-parent中定义了若干个依赖管理

  3. 继承parent模块可以避免多个依赖使用相同技术时出现依赖版本冲突

  4. 继承parent的形式也可以采用引入依赖的形式实现效果

2、starter

​starter定义了使用某种技术时对于依赖的固定搭配格式,也是一种最佳解决方案,使用starter可以帮助开发者减少依赖配置

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

比如开发web应用,就需要引入上面的web对应的starter依赖,并没有写SpringMVC的坐标,点击 <artifactId>spring-boot-starter-web</artifactId>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <version>2.5.4</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-json</artifactId>
        <version>2.5.4</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <version>2.5.4</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>5.3.9</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.9</version>
        <scope>compile</scope>
    </dependency>
</dependencies>

可以发现叫做spring-boot-starter-json的名字中也有starter,这个starter中又包含了若干个坐标,其实就是使用SpringMVC开发通常都会使用到Json

总结:

  1. 开发SpringBoot程序需要导入坐标时通常导入对应的starter
  2. 每个不同的starter根据功能不同,通常包含多个依赖坐标
  3. 使用starter可以实现快速配置的效果,达到简化配置的目的

3、引导类

下面说一下程序是如何运行的。目前程序运行的入口就是SpringBoot工程创建时自带的那个类,启动方式:

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

SpringBoot的引导类是Boot工程的执行入口,运行main方法就可以启动项目

SpringBoot工程运行后初始化Spring容器,扫描引导类所在包加载bean

当前这个类运行后就会产生一个Spring容器对象,并且可以将这个对象保存起来,通过容器对象直接操作Bean

@SpringBootApplication
public class SpringbootApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(SpringbootApplication.class, args);
        User user = context.getBean(User.class);
        System.out.println(user);
    }
}

总结:

  1. SpringBoot工程提供引导类用来启动程序
  2. SpringBoot工程启动后创建并初始化Spring容器

4、辅助功能(内嵌tomcat)

启动了一个web服务器,在引入的spring-boot-starter-web场景starter中

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

点击打开spring-boot-starter-web

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <version>2.5.4</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-json</artifactId>
        <version>2.5.4</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <version>2.5.4</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>5.3.9</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.9</version>
        <scope>compile</scope>
    </dependency>
</dependencies>

tomcat对应的东西

<dependencies>
    <dependency>
        <groupId>jakarta.annotation</groupId>
        <artifactId>jakarta.annotation-api</artifactId>
        <version>1.3.5</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-core</artifactId>
        <version>9.0.52</version>
        <scope>compile</scope>
        <exclusions>
            <exclusion>
                <artifactId>tomcat-annotations-api</artifactId>
                <groupId>org.apache.tomcat</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-el</artifactId>
        <version>9.0.52</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-websocket</artifactId>
        <version>9.0.52</version>
        <scope>compile</scope>
        <exclusions>
            <exclusion>
                <artifactId>tomcat-annotations-api</artifactId>
                <groupId>org.apache.tomcat</groupId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

这里有一个核心的坐标,tomcat-embed-core,叫做tomcat内嵌核心。就是这个东西把tomcat功能引入到了我们的程序中。

使用maven依赖管理变更起步依赖项

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jetty</artifactId>
    </dependency>
</dependencies>

Jetty比Tomcat更轻量级,可扩展性更强(相较于Tomcat),谷歌应用引擎(GAE)已经全面切换为Jetty

内置服务器

  • tomcat(默认) : apache出品,粉丝多,应用面广,负载了若干较重的组件
  • jetty:更轻量级,负载性能远不及tomcat
  • undertow:undertow,负载性能勉强跑赢tomcat

总结:

  1. 内嵌Tomcat服务器是SpringBoot辅助功能之一
  2. 内嵌Tomcat工作原理是将Tomcat服务器作为对象运行,并
    将该对象交给Spring容器管理
  3. 变更内嵌服务器思想是去除现有服务器,添加全新的服务

看到最后,点个赞吧!

相关文章:

  • Linux的scp命令远程传输文件
  • antv x6让拖拽控件工具箱悬浮在画布上,工具箱区域鼠标按下不生成节点
  • matlab怎么训练神经网络,matlab神经网络训练方法
  • 「面经分享」小米java岗二面面经,已拿offer
  • 手把手教你给女朋友编写一个公众号定时推送(java版本)
  • 数据结构与算法--动态规划
  • 标准IO移动光标
  • 咕咕驴2022新版AI短视频一键换脸小程序源码/带流量主
  • 检查异常处理方式:1,抛出;2,捕获
  • 数组清空(bzero与memset)
  • LocalDateTime获取时间类(当前时间)
  • java计算机毕业设计校园二手交易网站源码+系统+数据库+lw文档+mybatis+运行部署
  • 第1章Linux基础篇-Linux入门
  • java计算机毕业设计校园共享单车管理系统源码+系统+数据库+lw文档+mybatis+运行部署
  • 网课答案API 题库搜题查题系统
  • 10个确保微服务与容器安全的最佳实践
  • CentOS 7 防火墙操作
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • gitlab-ci配置详解(一)
  • isset在php5.6-和php7.0+的一些差异
  • Java编程基础24——递归练习
  • MaxCompute访问TableStore(OTS) 数据
  • Mocha测试初探
  • rc-form之最单纯情况
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • Yii源码解读-服务定位器(Service Locator)
  • 反思总结然后整装待发
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • #图像处理
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (六)软件测试分工
  • (论文阅读30/100)Convolutional Pose Machines
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (转)EXC_BREAKPOINT僵尸错误
  • .a文件和.so文件
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .net中调用windows performance记录性能信息
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解
  • [@Controller]4 详解@ModelAttribute
  • [BZOJ4337][BJOI2015]树的同构(树的最小表示法)
  • [C#]winform制作仪表盘好用的表盘控件和使用方法
  • [CF226E]Noble Knight's Path
  • [IT生活推荐]大家一起来玩游戏喽,来的都进!
  • [jQuery]div滚动条回到最底部
  • [Linux]----文件操作(复习C语言+文件描述符)
  • [nlp] id2str的vocab.json转换为str2id
  • [NOI2005]聪聪与可可(期望)