1.springboot入门

目录

1 springboot简介

1.1SpringBoot的概念

1.2 SpringBoot的特征 

​编辑 1.3 Spring的劣势

2 开发环境 

Spring Boot

为以下构建⼯具⽀持:

Spring Boot ⽀持以下嵌⼊式 servlet 容器:

SpringBoot2.7版本新特性

 1.⾃动配置变更

2.

3.⽀持 GraphQL

4.⽀持 Podman , Podman 和 Docker ⼀样,是现在⽐较⽕热的容器引擎。

5.⽀持 RabbitStreamTemplate

6. /info 端点⽀持暴露应⽤程序运⾏时的⼀些操作系统信息:

7.⽀持 Cache2k , Cache2k 是⼀个开源的轻量级、⾼性能 Java 内存缓存库。

3 SpringBoot快速⼊⻔

3.1 Maven⽅式构建

2 ⽤Spring Initializr ⽅式构建

3 阿⾥云构建⽅式

4 HelloWorld执⾏分析

1 pom.xml⽂件分析

2 starter

3 引导类 

4 内置服务器 


1 springboot简介

1.1SpringBoot的概念

SpringBoot 提供了⼀种快速使⽤ Spring 的⽅式,基于约定优于配置的思想,可以让
开发⼈员不必在配置与逻辑业务之间进⾏思维的切换,全身⼼的投⼊到逻辑业务的
代码编写中,从⽽⼤⼤提⾼了开发的效率,⼀定程度上缩短了项⽬周期。
Spring Boot 可以轻松创建独⽴的、⽣产级的基于 Spring 的应⽤程序,您可以
接运⾏
Spring Boot 提供了⼀种 Opinionated 观点,来对待 Spring 和第三⽅库,让上⾯的搭建过程最⼩化。绝⼤多数 Spring Boot 应⽤都只需要极简的配置就可 以。
Opinionated ,有态度有观点,固执的。其含义就是,在搭建应⽤的过程中,
Spring Boot 你最好这样做才和我的思路⼀致,才能让你减少更多的配置,他采取的
是⼀种 约定由于配置的思想 从⽽减少不要的配置,做到极简配置。

1.2 SpringBoot的特征 

  • 创建独立的 Spring 应用程序

  • 直接嵌入 Tomcat、Jetty 或 Undertow(无需部署 WAR 文件)

 独⽴的含义是能够独⽴分发、独⽴部署、独⽴运⾏。因为最终编译后的结果、第三⽅
Jar和容器都打包成⼀个可执⾏的jar,使⽤ java -jar 就可以运⾏了。
以前的传统⽅式是编译成⼀个WAR包,然后放到Tomcat等容器⾥,通过启动容器才能
运⾏。

  • 提供自以为是的“入门”依赖项以简化您的构建配置 

提供很多 starter 依赖,提供很多常⽤组件的默认配置,简化你的配置。例如,开
发Web应⽤,就⽤spring-boot-starter-web,数据持久化就⽤spring-bootstarter-
data-xxx。 

  • 尽可能自动配置 Spring 和 3rd 方库
  • 完全无需代码生成,无需 XML 配置  
  • 提供 production-ready(⽣产就绪)功能,例如指标、健康检查和外部化配
    置。

 production-ready指应⽤在编码完成后,能否直接上到⽣产上去?还需要做哪些⼯
作才可以发布到⽣产,即⽣产就绪

1.3 Spring的劣势

Spring :为解决企业应⽤程序开发的复杂性⽽创建的框架。
但使⽤ Spring 开发应⽤显得烦琐,因为它使⽤了⼤量的XML配置⽂件,配置烦琐,
整合不易,开发和部署效率低下。
1) 配置繁琐
Spring的配置是重量级的。开始Spring⽤XML配置,⽽且是很多XML配置。Spring
2.5引⼊了基于注解的组件扫描,这消除了⼤量针对应⽤程序⾃身组件的显式XML配
置。Spring 3.0引⼊了基于Java的配置,这是⼀种类型安全的可重构配置⽅式,可
以代替XML。

 所有这些配置都代表了开发时的损耗。因为在思考Spring特性配置和解决业务问题
之间需要进⾏思维切换,所以编写配置挤占了编写应⽤程序逻辑的时间。

2)依赖繁琐 

项⽬的依赖管理也是⼀件耗时耗⼒的事情。在环境搭建时,需要分析要导⼊哪些库
的坐标,⽽且还需要分析导⼊与之有依赖关系的其他库的坐标,⼀旦选错了依赖的
版本,随之⽽来的不兼容问题就会严重阻碍项⽬的开发。

2 开发环境 

Spring Boot

Spring Boot 2.7.3 需要Java 8,并且兼容 Java 18(包括 Java 18 )。还需要Spring
Framework 5.3.20或更⾼版本。

为以下构建⼯具⽀持:

Build Tool                                             Version

Maven                                                  3.5+

Gradle                                               6.8.x, 6.9.x, and 7.x

Spring Boot ⽀持以下嵌⼊式 servlet 容器:

Name                                                               Servlet Version

Tomcat 9.0                                       4.0
Jetty 9.4                                           3.1
Jetty 10.0                                         4.0
Undertow 2.0                                    4.0

SpringBoot2.7版本新特性

前言 · Spring Boot 中文文档 (felord.cn)

 1.⾃动配置变更

META-INF/spring.factories
改为
METAINF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

2.

新增了⼀个⾃动配置注解 @AutoConfiguration ,⽤来代替之前的@Configuration ,⽤于标识新⾃动配置注册⽂件中的顶级⾃动配置类。 

3.⽀持 GraphQL

GraphQL = Graph + QL(Query Language),它是⼀种⽤于 API 的基于图表化的查
询语⾔

4.⽀持 Podman , Podman 和 Docker ⼀样,是现在⽐较⽕热的容器引擎。

5.⽀持 RabbitStreamTemplate

6. /info 端点⽀持暴露应⽤程序运⾏时的⼀些操作系统信息:

7.⽀持 Cache2k , Cache2k 是⼀个开源的轻量级、⾼性能 Java 内存缓存库。

3 SpringBoot快速⼊⻔

Spring | Spring Quickstart Guide

3.1 Maven⽅式构建

1、创建⼀个普通的Maven⼯程

2.导⼊springBoot的依赖

<?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.example</groupId>
    <artifactId>demo1-springboot</artifactId>
    <version>1.0-SNAPSHOT</version>

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

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

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

</project>

3.编写⼀个主程序,启动Spring Boot应⽤

/**
 * @author 26613
 * @SpringBootApplication来标注⼀个主程序类
 */
@SpringBootApplication
public class HelloWorldSpringApplication {
    public static void main(String[] args) {
        // Spring应⽤启动起来
        SpringApplication.run(HelloWorldSpringApplication.class,args);
    }
}

4.编写相关的Controller

/**
 * @author 26613
 */
@RestController
public class HelloWorldController {

    @RequestMapping("/hello")
    public String hello(String name){
        return "hello SpringBoot";
    }
}

5.启动主程序,并完成浏览器访问http://localhost:8080/hello测试

2 ⽤Spring Initializr ⽅式构建

Spring Initializr是⼀个Web应⽤,它提供了⼀个基本的项⽬结构,能够帮助我们快速构建⼀个基础的Spring Boot项⽬

 

 编写相关的Controller

@RestController
public class HelloWorldController {

    @RequestMapping("/hello")
    public String hello(String name){
        return "hello SpringBoot";
    }
}

 启动主程序,并完成浏览器访问http://localhost:8080/hello测试

3 阿⾥云构建⽅式

Spring Initializr是⼀个Web应⽤,创建时将Server URL的配置使⽤阿⾥云的地址https://start.aliyun.com ,就是阿⾥云构建⽅式,防止下载过慢。

4 HelloWorld执⾏分析

1 pom.xml⽂件分析

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

2 starter

SpringBoot官⽅给出了好多个starter的定义,⽅便我们使⽤,⽽且名称都是如下格式

命名规则:spring-boot-starter-技术名称

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

  • 项⽬中的pom.xml定义了使⽤SpringMVC技术,但是并没有写SpringMVC的坐标,⽽是添加了⼀个名字中包含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> 

之前提到过开发SpringMVC程序需要导⼊spring-webmvc的坐标和spring整合web开发的坐标,就是上⾯这组坐标中的最后两个了。 

        我们可以发现,这个starter中⼜包含了若⼲个坐标,其实就是使⽤SpringMVC开发
通常都会使⽤到Json,使⽤json⼜离不开这⾥⾯定义的这些坐标,看来还真是⽅
便,SpringBoot把我们开发中使⽤的东⻄能⽤到的都给提前做好了。你仔细看完会
发现,⾥⾯有⼀些你没⽤过的。的确会出现这种过量导⼊的可能性,没关系,可以
通过maven中的排除依赖剔除掉⼀部分。

总结:
使⽤starter可以帮开发者快速配置依赖关系。以前写依赖3个坐标的,现在写导⼊
⼀个就搞定了,就是加速依赖配置的。

3 引导类 

⽬前程序运⾏的⼊⼝就是SpringBoot⼯程创建时⾃带的那个类了,带有main⽅法的那个类,运⾏这个类就可以启动SpringBoot⼯程的运⾏

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

当前这个类运⾏后就会产⽣⼀个Spring容器对象,并且可以将这个对象保存起来,通过容器对象直接操作Bean。这个类在SpringBoot程序中是所有功能的⼊⼝,称这个类为引导类。

        作为⼀个引导类最典型的特征就是当前类上⽅声明了⼀个注解
        @SpringBootApplication
总结
1. SpringBoot⼯程提供引导类⽤来启动程序
2. SpringBoot⼯程启动后创建并初始化Spring容器

4 内置服务器 

当前我们做的SpringBoot⼊⻔案例勾选了Spirng-web的功能,并且导⼊了对应的starter。

SpringBoot发现,既然你要做web程序,肯定离不开使⽤web服务器,这样吧,帮⼈帮到底,送佛送到⻄。我帮你搞⼀个web服务器,你要愿意⽤的,直接使⽤就好了,⼲脆我再多给你⼏种选择,你随便切换。万⼀你不想⽤我给你提供的,也⾏,你可以⾃⼰搞。

由于这个功能不属于程序的主体功能,可⽤可不⽤,于是乎SpringBoot将其定位成辅助功能,别⼩看这么⼀个辅助功能,它可是帮我们开发者⼜减少了好多的设置性⼯作。

下⾯就围绕着这个内置的web服务器,也可以说是内置的tomcat服务器来研究⼏个问题 

内嵌Tomcat定义位置

spring-boot-starter-web中的spring-boot-starter-tomcat做的,这⾥⾯有⼀个核⼼的坐标,tomcat-embed-core,叫做tomcat内嵌核⼼。就是这个东⻄把tomcat功能引⼊到了我们的程序中。

内嵌Tomcat运⾏原理

tomcat服务器运⾏其实是以对象的形式在Spring容器中运⾏的,具体运⾏的是上前⾯提到的那个
tomcat内嵌核⼼。通过依赖排除可以去掉这个web服务器功能

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

更换内嵌Tomcat

根据SpringBoot的⼯作机制,⽤什么技术,加⼊什么依赖就⾏了。SpringBoot提供了3款内置的服
务器

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

想⽤哪个,加个坐标就OK。前提是把tomcat排除掉,因为tomcat是默认加载的。例如:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值