深入理解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。

目录
相关文章
|
XML Java 测试技术
JVM && 软件测试的目的和原则 && Spring基本概念 && 项目创建 && 软件测试的生命周期 && SpringBoot创建和运行 && Bean作用域
JVM && 软件测试的目的和原则 && Spring基本概念 && 项目创建 && 软件测试的生命周期 && SpringBoot创建和运行 && Bean作用域
229 0
|
XML 监控 NoSQL
【SpringBoot学习笔记 一】SpringBoot基本概念和项目初始化
【SpringBoot学习笔记 一】SpringBoot基本概念和项目初始化
508 0
|
Java Docker 容器
Docker基本概念与实践(五)-使用dockerfile部署简单web项目和springboot项目
Dockerfile简介 Dcokerfile是一个文本格式的配置文件,由一系列命令和参数构建的脚本,用户可通过这个快速构建自定义的镜像 ​ 官方仓库dockerhub和一些镜像仓库已经提供大量的镜像,但有些时候不能满足我们的需求,例如安装一些安装比较少的第三方软件,或自定义的项目,这个时候只能先用公共仓库镜像,启动容器,然后在容器中按照我们的需求安装软件,修改配置等等操作,之后提交镜像等等。
3922 0
|
5月前
|
JavaScript Java 关系型数据库
基于springboot的项目管理系统
本文探讨项目管理系统在现代企业中的应用与实现,分析其研究背景、意义及现状,阐述基于SSM、Java、MySQL和Vue等技术构建系统的关键方法,展现其在提升管理效率、协同水平与风险管控方面的价值。
|
5月前
|
搜索推荐 JavaScript Java
基于springboot的儿童家长教育能力提升学习系统
本系统聚焦儿童家长教育能力提升,针对家庭教育中理念混乱、时间不足、个性化服务缺失等问题,构建科学、系统、个性化的在线学习平台。融合Spring Boot、Vue等先进技术,整合优质教育资源,提供高效便捷的学习路径,助力家长掌握科学育儿方法,促进儿童全面健康发展,推动家庭和谐与社会进步。
|
5月前
|
JavaScript Java 关系型数据库
基于springboot的古树名木保护管理系统
本研究针对古树保护面临的严峻挑战,构建基于Java、Vue、MySQL与Spring Boot技术的信息化管理系统,实现古树资源的动态监测、数据管理与科学保护,推动生态、文化与经济可持续发展。
|
5月前
|
监控 安全 JavaScript
2025基于springboot的校车预定全流程管理系统
针对传统校车管理效率低、信息不透明等问题,本研究设计并实现了一套校车预定全流程管理系统。系统采用Spring Boot、Java、Vue和MySQL等技术,实现校车信息管理、在线预定、实时监控等功能,提升学校管理效率,保障学生出行安全,推动教育信息化发展。
|
5月前
|
人工智能 Java 关系型数据库
基于springboot的画品交流系统
本项目构建基于Java+Vue+SpringBoot+MySQL的画品交流系统,旨在解决传统艺术交易信息不透明、流通受限等问题,融合区块链与AI技术,实现画品展示、交易、鉴赏与社交一体化,推动艺术数字化转型与文化传播。
|
5月前
|
JavaScript Java 关系型数据库
基于springboot的高校运动会系统
本系统基于Spring Boot、Vue与MySQL,实现高校运动会报名、赛程安排及成绩管理的全流程信息化,提升组织效率,杜绝信息错漏与冒名顶替,推动体育赛事智能化发展。

热门文章

最新文章