深入理解SpringBoot(二)—— SpringBoot基本概念

简介: 本文讲述了SpringBoot的基本概念

2 SpringBoot基本概念

2.1 SpringBoot概述

说明:SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。

Spring缺点

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

SpringBoot优点

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


2.2 parent

说明:在创建工程时,我们总是难免配置pom.xml文件,但不同项目的pom.xml可能所需的东西完全一样。以下面为例,project-a的pom.xml可能和project-b的pom.xml所需的配置依赖项完全一样;为此,springboot将所有项目开发需要的依赖全部提前写在同一个隐藏的project-dependencies的pom.xml中,并且在此之上生成了一个project-parent的pom.xml,该配置文件可以直接引用各种依赖的标签,并配置好了版本信息,版本的选择由Springboot源码负责人员来测量最稳定的依赖版本,这实际上大大改变了协同工作的效率,避免一群人开发一个项目时存在不同的依赖版本而去花费额外的开销去调整包的版本。

image-20221005231740046

在springboot工程中,我们可以点击pom.xml文件,可以发现该文件继承了parent对应的pom.xml文件,按ctrl并点击可以查看文件详情。

image-20221005232732000

进入后再次点击箭头所指位置,我们可以发现进入我们刚刚所说的project-dependencies的pom.xml中。

image-20221005232948314

如果你不适用官方测定的版本,而改用自己选定的版本,那么你需要继承parent模块,这样可以保证该依赖版本对应的其他依赖的版本会全部发生变动,使得所有的依赖不会发生版本冲突。

实际应用:当我们使用坐标时,仅书写pom.xml所需的GAV中的GA,而V(version)由springboot提供;如果springboot未提供对应版本的v或者没有项目所需的依赖坐标,则会发生坐标错误,此时在注意各个依赖版本冲突的情况下,再去指定version即可。


2.3 starter

说明:从项目中的pom.xml文件中我们可以发现一个名为spring-starter_test的依赖。

image-20221005234331843

该依赖可以按ctrl点击进去查看,可以发现,他帮我们导入了若干个依赖项,这些依赖项都是SpringWeb项目所需的启动依赖项,如tomcat、mvc、web等依赖项。简而言之,我们称这种为“牵一发而动全身”,当导入了一个starter依赖,则项目所需的所有依赖都会被导入。

image-20221005234455782


2.4 引导类

说明:在创建项目的时候,我们发现了这么一个类,该类我们称之为引导类

image-20221005235305974

众所周知,SpringBoot本质上是Spring的简化实现,也就是说,Spring该有的它都有;在Spring的学习过程中,我们知道有一个IOC容器用户管理对象,也就是bean,那么它在SpringBoot中是通过什么来体现的呢?就是通过引导类。

让我们重新改变一下引导类里面的代码,我们居然惊讶地发现,它能够返回一个applicationContext对象,这意味着等号右边的部分相当于做了SpringIOC的工作;也就是说,通过返回的对象,我们可以实现springIOC中getBean等方法去获取bean。

package springboot_01_01_quickstart;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class Springboot0101QuickstartApplication {

    public static void main(String[] args) {

        ApplicationContext applicationContext = SpringApplication.run(Springboot0101QuickstartApplication.class, args);
    }

}

可在引导类并没有写获取bean的代码,它是如何获取bean的?这全都依赖于SpringBootApplication注解。

让我们查看注解的内容,使用ctrl+点击查看注解。我们发现其源码中出现这么一个注解:ComponentScan(扫描组件,即扫描bean)。好了破案了,实际上并不需要我们手动使用getBean来获取bean,Springboot在我们没有指定bean的情况下,它会自动扫描bean,该扫描的范围是引导类所在的目录下的所有内容。

image-20221006000351224

springBoot的引导类是Boot工程的执行入口,运行main方法就可以启动项目,SpringBoot工程运行后初始化Spring容器,扫描引导类所在包下的所有内容来加载bean。


2.5 内嵌tomcat

引入:在tomcat的文章中我们提到过,如果想要启动一个tomcat,必须采用run maven的形式或者打开tomcat安装目录的startup.bat文件来启动服务器,但在Boot工程中却没有类似的操作情况,这是怎么回事?

说明:在pom.xml的starter依赖中的tomcat依赖中我们可以发现这么一件事:Boot工程中内嵌了一个tomcat容器。

image-20221006001311898

SpringBoot将tomcat的核心代码嵌入到工程中,tomcat的操作对象交给了SpringBoot工程来进行管理。

拓展:实际上除了Tomcat服务器,后来还出现了Jetty服务器,其相对于Tomcat来说可扩展性更强。现如今,谷歌应用引擎已经全面将tomcat替换为jetty。tomcat中除了内置tomcat和jetty,还内置了undertow。tomcat是apache出品,粉丝多,应用面广,负载了若干较重的组件;jetty虽然更轻量,但负载性能远不及tomcat;undertow负载性能勉强跑赢tomcat,但没必要为了这点差别去放弃tomcat。

目录
相关文章
|
11月前
|
XML Java 测试技术
JVM && 软件测试的目的和原则 && Spring基本概念 && 项目创建 && 软件测试的生命周期 && SpringBoot创建和运行 && Bean作用域
JVM && 软件测试的目的和原则 && Spring基本概念 && 项目创建 && 软件测试的生命周期 && SpringBoot创建和运行 && Bean作用域
79 0
|
XML 监控 NoSQL
【SpringBoot学习笔记 一】SpringBoot基本概念和项目初始化
【SpringBoot学习笔记 一】SpringBoot基本概念和项目初始化
257 0
|
Java Docker 容器
Docker基本概念与实践(五)-使用dockerfile部署简单web项目和springboot项目
Dockerfile简介 Dcokerfile是一个文本格式的配置文件,由一系列命令和参数构建的脚本,用户可通过这个快速构建自定义的镜像 ​ 官方仓库dockerhub和一些镜像仓库已经提供大量的镜像,但有些时候不能满足我们的需求,例如安装一些安装比较少的第三方软件,或自定义的项目,这个时候只能先用公共仓库镜像,启动容器,然后在容器中按照我们的需求安装软件,修改配置等等操作,之后提交镜像等等。
3649 0
|
23天前
|
SQL 前端开发 NoSQL
SpringBoot+Vue 实现图片验证码功能需求
这篇文章介绍了如何在SpringBoot+Vue项目中实现图片验证码功能,包括后端生成与校验验证码的方法以及前端展示验证码的实现步骤。
SpringBoot+Vue 实现图片验证码功能需求
|
22天前
|
JavaScript
SpringBoot+Vue+ElementUI 实现视频播放 轮播图效果
这篇文章介绍了如何在SpringBoot+Vue+ElementUI项目中使用vue-awesome-swiper插件实现视频播放轮播图效果,包括安装插件、引入项目和使用案例的步骤。
SpringBoot+Vue+ElementUI 实现视频播放 轮播图效果
|
22天前
|
JavaScript 前端开发 Java
SpringBoot + Vue 前端后分离项目精进版本
这篇文章详细介绍了一个基于SpringBoot + Vue的前后端分离项目的搭建过程,包括前端Vue项目的初始化、依赖安装、页面创建和路由配置,以及后端SpringBoot项目的依赖添加、配置文件修改、代码实现和跨域问题的解决,最后展示了项目运行效果。
SpringBoot + Vue 前端后分离项目精进版本
|
22天前
|
缓存 前端开发 JavaScript
前后端分离 SpringBoot+Vue商城买卖系统通杀版本。大家可以参考学习一下
这篇文章介绍了一个使用SpringBoot+Vue开发的前后端分离商城系统,包括技术架构、开发环境、实现的功能以及项目截图,并展示了普通用户和商家端的功能界面。
前后端分离 SpringBoot+Vue商城买卖系统通杀版本。大家可以参考学习一下
|
22天前
|
JavaScript Java 关系型数据库
美妆商城系统 SpringBoot + Vue 【毕业设计 资料 + 源码】
这篇文章介绍了一个使用SpringBoot + Vue + Mybatis + Mysql技术栈开发的美妆商城系统,包括系统功能划分、部分页面截图和前后端源码示例,并提供了GitHub上的源码链接。
美妆商城系统 SpringBoot + Vue 【毕业设计 资料 + 源码】
|
12天前
|
JavaScript 前端开发 小程序
【项目实战】SpringBoot+vue+iview打造一个极简个人博客系统
这是一个基于 SpringBoot+MybatisPlus+Vue+Iview 技术栈构建的个人极简博客系统,适合初学者实战练习。项目包含文章分类、撰写文章、标签管理和用户管理等功能,代码简洁并配有详细注释,易于上手。此外,该项目也可作为毕业设计的基础进行二次开发。
53 0
【项目实战】SpringBoot+vue+iview打造一个极简个人博客系统
|
18天前
|
JavaScript Java 关系型数据库
毕设项目&课程设计&毕设项目:基于springboot+vue实现的前后端分离的考试管理系统(含教程&源码&数据库数据)
在数字化时代背景下,本文详细介绍了如何使用Spring Boot框架结合Vue.js技术栈,实现一个前后端分离的考试管理系统。该系统旨在提升考试管理效率,优化用户体验,确保数据安全及可维护性。技术选型包括:Spring Boot 2.0、Vue.js 2.0、Node.js 12.14.0、MySQL 8.0、Element-UI等。系统功能涵盖登录注册、学员考试(包括查看试卷、答题、成绩查询等)、管理员功能(题库管理、试题管理、试卷管理、系统设置等)。
毕设项目&课程设计&毕设项目:基于springboot+vue实现的前后端分离的考试管理系统(含教程&源码&数据库数据)