【springboot基础篇教程】为什么需要SpringBoot程序

✅作者简介:大家好我是poizxc2014
📖个人主页:poizxc2014的博客_CSDN博客-数据库,mysql,java领域博主
🔥💖如果觉得博主的文章还不错的话,请👍三连支持一下博主哦🤞

目录

为什么需要SpringBoot程序?

Spring程序初始搭建过程

Spring程序的开发过程

SpringBoot应运而生

Spring程序缺点

SpringBoot程序的核心功能及优点

起步依赖(简化依赖配置)

自动配置(简化常用工程相关配置)

3个文件的加载优先顺序是什么

内嵌tomcat

如何找到内嵌Tomcat定义位置呢?

tomcat服务器如何运行的呢?

更换内嵌Tomcat


为什么需要SpringBoot程序?

这就需要先知道什么时候使用这个技术,也就是技术对应的应用场景

简单概括就是加速Spring程序的开发,这个加速要从如下两个方面来说

  • Spring程序初始搭建过程

  • Spring程序的开发过程

Spring程序初始搭建过程

我们知道原始的Spring程序初始搭建的时候可能有些繁琐,最基本的Spring程序至少有一个配置文件或配置类,用来描述Spring的配置信息,那么这个文件可以不写吗?

Spring程序的开发过程

原始的Spring程序开发的过程也有些繁琐,Spring程序开发过程无外乎导入对应的jar包(或坐标)然后将jar包(或坐标)交给Spring容器管理,也就是配置成Spring容器管控的bean是不是就可以了呢?所以我们要简化spring开发过程。

SpringBoot应运而生

这个时候我们已经知道了SpringBoot的功能以及SpringBoot技术的设计初衷是什么了?

其设计目的是用来简化Spring应用的初始搭建以及开发过程

都简化了了哪些东西呢?其实就是针对原始的Spring程序制作的两个方面进行了简化:

Spring程序缺点

  • 依赖设置繁琐

    • 以前写Spring程序,使用的技术都要自己一个一个的写,现在不需要了,如果做过原始SpringMVC程序的小伙伴应该知道,写SpringMVC程序,最基础的spring-web和spring-webmvc这两个坐标时必须的,就这还不包含你用json啊等等这些坐标,现在呢?一个坐标搞定

  • 配置繁琐

    • 以前写配置类或者配置文件,然后用什么东西就要自己写加载bean这些东西,现在呢?什么都没写,照样能用

再来看看前面提出的两个问题,已经有答案了。都简化了,都不用写了。这就是SpringBoot的好处。这些简化操作在SpringBoot中有专业的用语,也是SpringBoot程序的核心功能及优点:

SpringBoot程序的核心功能及优点

  • 起步依赖(简化依赖配置)

    • 依赖配置的书写简化就是靠这个起步依赖达成的

  • 自动配置(简化常用工程相关配置)

    • 配置过于繁琐,使用自动配置就可以做相应的简化,但是内部还是很复杂的

  • 内置服务器

    • 除了上面的功能,其实SpringBoot程序还有其他的一些优势,比如我们没有配置Tomcat服务器,但是能正常运行

接下来详细说一下这三个核心功能:

起步依赖(简化依赖配置)

它是如何优化jar的呢?

SpringBoot为我们提供了starter与parent 这两种方式来简化依赖配置

  • 如果需要用什么技术,先去找有没有这个技术对应的starter

    • 如果有对应的starter,直接写starter,而且无需指定版本,版本由parent提供

    • 如果没有对应的starter,手写坐标即可

  • 实际开发中如果发现坐标出现了冲突现象,确认你要使用的可行的版本号,使用手工书写的方式添加对应依赖,覆盖SpringBoot提供给我们的配置管理

parent仅仅帮我们进行版本管理,它不负责帮你导入坐标,说白了用什么还是你自己定,只不过版本不需要你管理了。整体上来说,使用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>
  • 这个坐标中定义了两组信息,第一组是各式各样的依赖版本号属性,下面列出依赖版本属性的局部,可以看的出来,定义了若干个技术的依赖版本号

<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>
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开发的坐标,就是上面这组坐标中的最后两个了。

所以以后见了spring-boot-starter-aaa这样的名字,这就是SpringBoot官方给出的starter定义。

自动配置(简化常用工程相关配置)

SpringBoot通过配置文件application.properties就可以修改默认的配置

properties格式的文件书写规范是key=value

 上图可以看到这是官网提供的默认的如何配置项目端口的配置。

SpringBoot除了提供properties格式的配置,还有一种书写起来更简便的配置格式提供给开发者使用。分别如下:

  • properties格式

  • yml格式(主流格式)

  • yaml格式

3个文件的加载优先顺序是什么

application.properties  >  application.yml  >  application.yaml

内嵌tomcat

如何找到内嵌Tomcat定义位置呢?

首先导入的web相关的starter。

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

打开查看web的starter导入了哪些东西

<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对应的东西了,居然也是一个starter,再打开看看

<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功能引入到了我们的程序中。

总结:

谁把tomcat引入到程序中的?spring-boot-starter-web中的spring-boot-starter-tomcat做的。之所以你感觉很奇妙的原因就是,这个东西是默认加入到程序中了,所以感觉很神奇,居然什么都不做,就有了web服务器对应的功能。

tomcat服务器如何运行的呢?

Spring容器是用来管理对象的,所以tomcat这个对象能不能交给Spring容器管理呢?当然是可以的,tomcat服务器运行其实是以对象的形式在Spring容器中运行的。这东西最后是以一个对象的形式存在,保存在Spring容器中悄悄运行的。

如果不想让其运行,如何处理?(只需要排除它的核心包即可)

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

更换内嵌Tomcat

那根据上面的操作我们思考是否可以换个服务器呢?必须的嘛。根据SpringBoot的工作机制,用什么技术,加入什么依赖就行了。SpringBoot提供了3款内置的服务器

  • tomcat(默认):apache出品

  • jetty:更轻量级,负载性能远不及tomcat

  • undertow:负载性能勉强跑赢tomcat

    想用哪个,加入对应坐标就可以啦。前提是把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-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jetty</artifactId>
    </dependency>
</dependencies>

🔥以上就是【springboot基础篇教程】为什么需要SpringBoot程序全部内容,如果有改进的建议,欢迎在评论区留言奥~

如果觉得博主的文章还不错的话,请大家多多三连支持一下博主,你们的支持就是我创作的动力💖

  • 16
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值