深入理解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作用域
92 0
|
XML 监控 NoSQL
【SpringBoot学习笔记 一】SpringBoot基本概念和项目初始化
【SpringBoot学习笔记 一】SpringBoot基本概念和项目初始化
277 0
|
Java Docker 容器
Docker基本概念与实践(五)-使用dockerfile部署简单web项目和springboot项目
Dockerfile简介 Dcokerfile是一个文本格式的配置文件,由一系列命令和参数构建的脚本,用户可通过这个快速构建自定义的镜像 ​ 官方仓库dockerhub和一些镜像仓库已经提供大量的镜像,但有些时候不能满足我们的需求,例如安装一些安装比较少的第三方软件,或自定义的项目,这个时候只能先用公共仓库镜像,启动容器,然后在容器中按照我们的需求安装软件,修改配置等等操作,之后提交镜像等等。
3679 0
|
2月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
159 1
|
3月前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的服装商城管理系统
基于Java+Springboot+Vue开发的服装商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的服装商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
171 2
基于Java+Springboot+Vue开发的服装商城管理系统
|
3月前
|
前端开发 JavaScript Java
SpringBoot项目部署打包好的React、Vue项目刷新报错404
本文讨论了在SpringBoot项目中部署React或Vue打包好的前端项目时,刷新页面导致404错误的问题,并提供了两种解决方案:一是在SpringBoot启动类中配置错误页面重定向到index.html,二是将前端路由改为hash模式以避免刷新问题。
253 1
|
28天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,创建并配置 Spring Boot 项目,实现后端 API;然后,使用 Ant Design Pro Vue 创建前端项目,配置动态路由和菜单。通过具体案例,展示了如何快速搭建高效、易维护的项目框架。
100 62
|
26天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
45 2
|
28天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
3月前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的大学竞赛报名管理系统
基于Java+Springboot+Vue开发的大学竞赛报名管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的大学竞赛报名管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
226 3
基于Java+Springboot+Vue开发的大学竞赛报名管理系统