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


    🍎个人主页:亮点主页
    🍊个人信条:理想如果不向现实做一点点屈服,那么理想也将归于尘土
    🍑刷题专栏:【Java】牛客网刷题
    🥭刷题网站:牛客网 学习的一种有效途径就是刷题,丰富的做题经验可以加深对知识点的理解,赶快点击这里注册学习吧👉你的进阶之路!

    一、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..."; 
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • ④:运行自动生成的Application类

    在这里插入图片描述

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

    pom.xml文件
    
    <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.0modelVersion> 
       <parent> 
         <groupId>org.springframework.bootgroupId>    
         <artifactId>spring-boot-starter-parentartifactId> 
         <version>2.5.4version>
       parent> 
       <groupId>com.itheimagroupId> 
       <artifactId>springboot-01-quickstartartifactId> 
       <version>0.0.1-SNAPSHOTversion> 
       <dependencies>
         <dependency> 
           <groupId>org.springframework.bootgroupId> 
           <artifactId>spring-boot-starter-webartifactId>
         dependency>
       dependencies>
    project>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    Application类
    @SpringBootApplication
    public class Application {
      public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    (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
    
    <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.0modelVersion>
    
        <parent>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-parentartifactId>
            <version>2.7.1version>
        parent>
    
        <groupId>com.shiyimogroupId>
        <artifactId>springboot1artifactId>
        <version>1.0-SNAPSHOTversion>
    
        <properties>
            <maven.compiler.source>8maven.compiler.source>
            <maven.compiler.target>8maven.compiler.target>
        properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webartifactId>
            dependency>
    
        dependencies>
    
    project>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    1. 添加依赖spring-boot-starter-web
    
    <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.0modelVersion>
    
        <groupId>org.shiyimogroupId>
        <artifactId>spring4artifactId>
        <version>1.0-SNAPSHOTversion>
    
        <parent>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-parentartifactId>
            <version>2.7.1version>
        parent>
    
        <dependencies>
        	
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webartifactId>
            dependency>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-testartifactId>
                <scope>testscope>
            dependency>
        dependencies>
    project>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    1. 创建一个Controller测试是否能用

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

    1、parent

    pom.xml文件中的

    <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.5.4version>
    parent>
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

    <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-dependenciesartifactId>
        <version>2.5.4version>
    parent>
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

    <properties>
        <activemq.version>5.16.3activemq.version>
        <aspectj.version>1.9.7aspectj.version>
        <assertj.version>3.19.0assertj.version>
        <commons-codec.version>1.15commons-codec.version>
        <commons-dbcp2.version>2.8.0commons-dbcp2.version>
        <commons-lang3.version>3.12.0commons-lang3.version>
        <commons-pool.version>1.6commons-pool.version>
        <commons-pool2.version>2.9.0commons-pool2.version>
        <h2.version>1.4.200h2.version>
        <hibernate.version>5.4.32.Finalhibernate.version>
        <hibernate-validator.version>6.2.0.Finalhibernate-validator.version>
        <httpclient.version>4.5.13httpclient.version>
        <jackson-bom.version>2.12.4jackson-bom.version>
        <javax-jms.version>2.0.1javax-jms.version>
        <javax-json.version>1.1.4javax-json.version>
        <javax-websocket.version>1.1javax-websocket.version>
        <jetty-el.version>9.0.48jetty-el.version>
        <junit.version>4.13.2junit.version>
    properties>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

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

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.hibernategroupId>
                <artifactId>hibernate-coreartifactId>
                <version>${hibernate.version}version>
            dependency>
            <dependency>
                <groupId>junitgroupId>
                <artifactId>junitartifactId>
                <version>${junit.version}version>
            dependency>
        dependencies>
    dependencyManagement>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

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

    总结:

    1. 开发SpringBoot程序要继承spring-boot-starter-parent
    2. spring-boot-starter-parent中定义了若干个依赖管理
    3. 继承parent模块可以避免多个依赖使用相同技术时出现依赖版本冲突
    4. 继承parent的形式也可以采用引入依赖的形式实现效果

    2、starter

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

    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-webartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4

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

    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starterartifactId>
            <version>2.5.4version>
            <scope>compilescope>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-jsonartifactId>
            <version>2.5.4version>
            <scope>compilescope>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-tomcatartifactId>
            <version>2.5.4version>
            <scope>compilescope>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-webartifactId>
            <version>5.3.9version>
            <scope>compilescope>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-webmvcartifactId>
            <version>5.3.9version>
            <scope>compilescope>
        dependency>
    dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    可以发现叫做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);
        } 
      }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    总结:

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

    4、辅助功能(内嵌tomcat)

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

    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-webartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4

    点击打开spring-boot-starter-web

    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starterartifactId>
            <version>2.5.4version>
            <scope>compilescope>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-jsonartifactId>
            <version>2.5.4version>
            <scope>compilescope>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-tomcatartifactId>
            <version>2.5.4version>
            <scope>compilescope>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-webartifactId>
            <version>5.3.9version>
            <scope>compilescope>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-webmvcartifactId>
            <version>5.3.9version>
            <scope>compilescope>
        dependency>
    dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    tomcat对应的东西

    <dependencies>
        <dependency>
            <groupId>jakarta.annotationgroupId>
            <artifactId>jakarta.annotation-apiartifactId>
            <version>1.3.5version>
            <scope>compilescope>
        dependency>
        <dependency>
            <groupId>org.apache.tomcat.embedgroupId>
            <artifactId>tomcat-embed-coreartifactId>
            <version>9.0.52version>
            <scope>compilescope>
            <exclusions>
                <exclusion>
                    <artifactId>tomcat-annotations-apiartifactId>
                    <groupId>org.apache.tomcatgroupId>
                exclusion>
            exclusions>
        dependency>
        <dependency>
            <groupId>org.apache.tomcat.embedgroupId>
            <artifactId>tomcat-embed-elartifactId>
            <version>9.0.52version>
            <scope>compilescope>
        dependency>
        <dependency>
            <groupId>org.apache.tomcat.embedgroupId>
            <artifactId>tomcat-embed-websocketartifactId>
            <version>9.0.52version>
            <scope>compilescope>
            <exclusions>
                <exclusion>
                    <artifactId>tomcat-annotations-apiartifactId>
                    <groupId>org.apache.tomcatgroupId>
                exclusion>
            exclusions>
        dependency>
    dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

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

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

    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.bootgroupId>
                    <artifactId>spring-boot-starter-tomcatartifactId>
                exclusion>
            exclusions>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-jettyartifactId>
        dependency>
    dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

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

    内置服务器

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

    总结:

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

    看到最后,点个赞吧!
  • 相关阅读:
    如何设计一个可扩展的登录功能
    个人网站接入Google Ads的一点心得
    LeetCode题练习与总结:组合-77
    如何实现三维虚拟数字人直播1:全身姿态预估
    企业开发中名词解析— —加密与脱敏及部分开发规范
    关于如何在vue中使用typescript(第一天)
    31.带有文本和渐变阴影的CSS图标悬停效果
    C语言指针
    私有化轻量级持续集成部署方案--01-环境配置(下)
    【IDE】VS Core使用技巧
  • 原文地址:https://blog.csdn.net/CSDN_anhl/article/details/126592593