当前位置: 首页 > news >正文

SpringBoot基础(一):快速入门

SpringBoot基础系列文章

SpringBoot基础(一):快速入门


目录

  • 一、SpringBoot简介
  • 二、快速入门
  • 三、SpringBoot核心组件
    • 1、parent
      • 1.1、spring-boot-starter-parent
      • 1.2、spring-boot-dependencies
    • 2、starter
      • 2.1、spring-boot-starter-web
      • 2.2、spring-boot-starter
      • 2.3、parent和starter的区别
    • 3、启动类
    • 4、内嵌Tomcat运行原理

一、SpringBoot简介

  • SpringBoot可以简单快速地创建一个独立的、生产级别的Spring应用(说明:SpringBoot底层是Spring)
  • 大多数SpringBoot应用只需要编写少量配置即可快速整合Spring平台以及第三方技术

SpringBoot特性

  • 快速创建独立Spring应用
    • 以前的SSM框架,需要导包、写配置、启动运行
  • 直接嵌入Tomcat、Jetty or Undertow,不再需要部署war包
  • 提供可选的场景启动器(starter),简化应用整合
    • 为每一种场景准备一个依赖,如:spring-boot-starter-web、mybatis-plus-boot-starter
    • 以前需要导包,控制版本
  • 按需自动配置Spring以及第三方库
    • 约定大于配置:每个场景都有很多基本的默认配置

总结:简化整合、配置、开发、部署

二、快速入门

pom.xml

  • 所有springboot项目pom文件都必须继承spring-boot-starter-parent
  • web场景启动器spring-boot-starter-web包含了web开发的所有依赖
<?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><!-- 所有springboot项目都必须继承自 spring-boot-starter-parent --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.11</version><relativePath/></parent><artifactId>springboot</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!-- web开发的场景启动器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><!-- SpringBoot应用打包插件mvn clean package把项目打成可执行的jar包java -jar demo.jar启动项目--><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

核心启动类

// 这是一个SpringBoot应用
@SpringBootApplication 
public class SpringBootMainApplication {public static void main(String[] args) {SpringApplication.run(SpringBootMainApplication.class,args);}
}

Controller测试类

@RestController
public class HelloController {@GetMapping("/hello")public String hello(){return "Hello,Spring Boot !";}
}

访问路径:http://localhost:8080/hello

在这里插入图片描述

三、SpringBoot核心组件

1、parent

  之前传统框架对依赖版本的选择具有固定的搭配格式,并且这些依赖版本的选择还不能乱搭配。于是SpringBoot将所有的技术版本的常见使用方案(parent版本)都整理出来,以后开发者直接使用它提供的方案(parent版本)即可,就不用担心冲突问题了。

1.1、spring-boot-starter-parent

parent版本即为SpringBoot项目pom文件的父工程坐标

  • parent有很多版本,每个parent版本包含了几百种技术的版本号
  • parent只负责进行版本管理不会导入坐标
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.11</version>
</parent>

spring-boot-starter-parent坐标内容

  • 核心内容spring-boot-dependencies依赖管理,下面讲
  • 设置默认的java编译版本以及编码方式
  • 管理打包插件的版本,这也是SpringBoot的pom文件中打包插件不用写版本号的原因

在这里插入图片描述

1.2、spring-boot-dependencies

  • 这里将常用的框架之间适配的版本号已配置好
  • 只管理依赖版本,而不导入依赖
  • <dependencyManagement>依赖管理标签内,则表示只是引入申明,只有在子pom中使用<dependencies>(不用写版本号)依赖才会导入

在这里插入图片描述

  • 如果想导入依赖则需要在SpringBoot的pom文件中配置,如导入activemq
<dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-amqp</artifactId>
</dependency>
  • 如果想要修改版本号,可以在SpringBoot的pom文件中配置
<properties><activemq.version>5.7.0</activemq.version>
</properties># 或者直接修改版本,maven就近原则<dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-amqp</artifactId><version>5.7.0</version>
</dependency>

2、starter

  • starter定义了使用某种技术时对于依赖的固定搭配格式,可以帮助开发者减少依赖配置
    • 官方提供的场景:命名为:spring-boot-starter-*
    • 第三方提供场景:命名为:*-spring-boot-starter

2.1、spring-boot-starter-web

  • 项目中的pom.xml没有写SpringMVC的坐标,而只添加spring-boot-starter-web的依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
  • spring-boot-starter-web中定义了若干个具体依赖的坐标

在这里插入图片描述

  • 简单看下spring-boot-starter-jsonspring-boot-starter-tomcat的内容

在这里插入图片描述

2.2、spring-boot-starter

  • 这里会导入spring的依赖

在这里插入图片描述

  • 核心依赖spring-boot-autoconfigurejar
  • 这些类会通过条件组件给spring容器导入bean对象(如:导入redis依赖,就会导入StringRedisTemplate对象,服务中我们就可以直接注入使用了)
  • 具体内容后面源码章节详解

在这里插入图片描述

2.3、parent和starter的区别

  • parent是定义了几百种依赖版本号
    • 以前写依赖需要自己手工控制版本,现在由SpringBoot统一管理,这样就不存在版本冲突了
    • 用来减少依赖冲突的
  • starter是一个坐标中定了若干个坐标
    • 以前写多个的,现在写一个
    • 用来减少依赖配置的书写量

3、启动类

  • Spring程序运行的基础是需要创建自己的Spring容器对象(IoC容器)
  • 将所有的对象交给Spring的容器管理,也就是一个一个的Bean
  • 当前这个类运行后就会产生一个Spring容器对象,通过容器对象可以直接操作Bean
  • 默认扫描包为启动类所在包及其子包
@SpringBootApplication
public class SpringBootMainApplication {public static void main(String[] args) {//获取ioc容器ConfigurableApplicationContext context = SpringApplication.run(SpringBootMainApplication.class, args);//获取组件User user = context.getBean(User.class);System.out.println(user);}
}

4、内嵌Tomcat运行原理

  • 从上面说到的内嵌tomcat的spring-boot-starter-tomcat说起
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><version>2.7.11</version><scope>compile</scope>
</dependency>
  • 这里导入了很多tomcat相关依赖

在这里插入图片描述

  从上面说到的spring-boot-autoconfigurejar包里的配置类,找到ServletWebServerFactoryAutoConfigurationServletWeb服务器工厂自动配置

  Tomcat类来自于tomcat-embed-core-9.0.74.jar,由于导入这个jar,才能创建Tomcat容器工厂类,后续才能创建Tomcat容器并启动。

在这里插入图片描述

  • 这里简单截图说下tomcat启动流程

创建Tomcat

在这里插入图片描述

启动Tomcat

在这里插入图片描述

挂起Tomcat,这也就是启动类main函数不会执行结束的原因

在这里插入图片描述

  • 这里只是简单介绍下,后续关于tomcat的源码章节详解

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【对抗性训练】FGM、AWP
  • 使用 mongoexport 导出 JSON 文件和 使用 mongoimport 导入 JSON 文件
  • Bug 解决 | 前端项目无法正确安装依赖?
  • 免费【2024】springboot 个人健康管理网站的设计与实现
  • 排序算法之基数排序
  • 几个常用脚本
  • 消费企业经营管理的两大痛点!一篇文章讲透解决办法!
  • Spring Boot 3.x Web MVC实战:实现流缓存的request
  • 速盾:高防ip和cdn哪个好?
  • 按钮(Buttons)-Qt-思维导图-学习笔记
  • Flink开发(一):概述与基础
  • SpringCloud 微服务nacos和eureka
  • 深入探针:PHP与DTrace的动态追踪艺术
  • 【Python快速入门和实践004】Python控制流
  • 机器学习中的距离概念
  • JavaScript 如何正确处理 Unicode 编码问题!
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 2017 年终总结 —— 在路上
  • Android交互
  • Bytom交易说明(账户管理模式)
  • codis proxy处理流程
  • exports和module.exports
  • Java基本数据类型之Number
  • Python打包系统简单入门
  • vue学习系列(二)vue-cli
  • Web设计流程优化:网页效果图设计新思路
  • 阿里云Kubernetes容器服务上体验Knative
  • 从零开始学习部署
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 基于HAProxy的高性能缓存服务器nuster
  • 你真的知道 == 和 equals 的区别吗?
  • 软件开发学习的5大技巧,你知道吗?
  • 使用Swoole加速Laravel(正式环境中)
  • 为什么要用IPython/Jupyter?
  • 物联网链路协议
  • 一起参Ember.js讨论、问答社区。
  • 译自由幺半群
  • 用 Swift 编写面向协议的视图
  • 做一名精致的JavaScripter 01:JavaScript简介
  • 移动端高清、多屏适配方案
  • ​经​纬​恒​润​二​面​​三​七​互​娱​一​面​​元​象​二​面​
  • #14vue3生成表单并跳转到外部地址的方式
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (ISPRS,2021)具有遥感知识图谱的鲁棒深度对齐网络用于零样本和广义零样本遥感图像场景分类
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (九)信息融合方式简介