SpringBoot框架入门指南

文章目录

  • SpringBoot的特点
  • Spring,SpringBoot的区别
  • SpringBoot常用注解标签
  • SpringBoot概述
  • SpringBoot简单Demo搭建
    • 读取配置文件的内容
  • SpringBoot自动配置
    • Condition自定义bean
    • SpringBoot常用注解原理
    • @EnableAutoConfiguration
  • SpringBoot监听机制
  • SpringBoot启动流程分析
    • 初始化模块
    • 启动模块

SpringBoot的特点

  1. 简化配置:Spring Boot自动配置Spring应用程序基于添加的依赖,简化了应用程序的配置。
  2. 快速开发:Spring Boot Starter模块和自动配置大大减少了应用程序的开发时间。
  3. 内嵌的HTTP服务器:Spring Boot应用程序内嵌Tomcat、Jetty或Undertow
  4. 生产就绪:Spring Boot提供了许多生产级别的服务,如安全指标、运行状况监测和外部化配置等
  5. 无需部署WAR文件:Spring Boot创建的是独立的应用程序,你可以使用Java的main方法来运行它,无需部署WAR文件。
  6. 易于集成Spring生态系统:Spring Boot可以很容易地与Spring生态系统中的其他项目(如Spring Data、Spring Security等)集成。
  7. 灵活性:虽然Spring Boot提供了很多默认配置,但你仍然可以覆盖这些配置以满足你的特定需求。
  8. 支持微服务架构:Spring Boot是构建微服务架构的理想选择,它可以与Spring Cloud等工具无缝集成。
  9. 社区支持:Spring Boot有一个活跃的社区,你可以从中获取帮助和支持。

Spring,SpringBoot的区别

Spring虽然是开源、轻量级、非侵入式的一站式框架,以及用友IoC、AOP,并且对于主流应用框架有很好的支持,并且提供有MVC实现,但是它的配置确实重量级的,虽然Spring引入了注解功能,但仍然需要编写大量的模板化配置文件,项目的依赖管理也是非常麻烦,在环境搭建时,需要分析要导入大量库的坐标,而且还需要分析导入与之有依赖关,一旦选错依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发进度。

Spring Boot 对上述 spring 的缺点进行的改善和优化,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度上缩短了项目周期。

SpringBoot常用注解标签

  1. @SpringBootApplication 是 springboot 核心注解,其中包含@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan。
  2. @Configuration:用于定义配置类,可替换xml配置文件。
  3. @EnableAutoConfiguration:让Spring Boot根据类路径中的jar依赖为当前项目进行自动配置。
  4. @ComponentScan:Spring将扫描该类所在的包以及子包中的组件。
  5. @RestController:这是一个方便的注解,它包括了@Controller和@ResponseBody。它用于创建RESTful web services。
  6. @RequestMapping:用于映射web请求到特定的处理器类或处理器方法。
  7. @Autowired:用于自动装配bean。
  8. @Service@Repository@Controller:这些注解用于表示类属于特定的层:服务层,数据访问层,表示层。
  9. @PathVariable:用于获取路径中的变量。
  10. @RequestBody:用于绑定请求体中的数据。
  11. @ResponseBody:用于将Controller的方法返回的对象通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。

SpringBoot概述

之前的Spring使用的时候,虽然已经非常的简化了,但是仍有部分功能十分的复杂,比如Spring的xml配置,在平时的配置中xml的配置十分的复杂,平时的话都是直接ctrlcv,还有导入相应的坐标依赖,需要一个模块导入一个模块,但是这样做的问题是容易产生依赖与依赖之间版本的不同。然后会报错。

使用SpringBoot解决了配置问题,因为SpringBoot中有自动配置功能,就是在应用程序启动过程中,SpringBoot考虑了众多因素,才决定Spring配置应该用哪个,不该用哪个,并且SpringBoot提供了起步依赖,就是需要使用的一组依赖会打包在一起,然后通过坐标引入。还有一系列的辅助功能,就是内嵌服务器,安全,指标,外部配置,并且SpringBoot是基于约定的,很多的配置都有默认值。

SpringBoot简单Demo搭建

在这里插入图片描述

SpringBoot的搭建明显比Spring简单了一截,首先就是创建一个简单的maven项目,然后导入SpringBoot的父工程坐标,然后导入web包,创建启动类,使用SpringApplication进行启动即可

	<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.6</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

在这里插入图片描述

写一个测试类,然后通过127.0.0.1:8080/hello即可访问,此时一个简单的SpringBootdemo就搭建起来。使用idea可以一键直接进行搭建

SpringBoot在创建项目的时候使用的是jar打包的方式


yml文件中的格式
在这里插入图片描述


读取配置文件的内容

主要有两种,自动读取,自定义配置

通过@Value来导入相应yml对应的配置的数据

使用Environment类,在SpirngBoot容器初始化的时候向其中通过@AutoWird向这个Environment这个类中去注入相应的加载数据。

使用@ConfigurationProperties(prefix = “”),将对象导入到相应的类中。


在这里插入图片描述

profile


SpringBoot内部文件加载顺序

在这里插入图片描述

如果目录下有config目录,会优先加载config目录下的配置文件,如果配置文件在当前项目的目录下会优先加载当前项目下的配置文件,平时创建在resoures下的配置文件在加载的时候加载到系统配置的classpath目录下。 加载的顺序为目录所在位置,但是加载的时候其他的配置文件也会加载,但是有优先级高低的问题,优先级低的可以加载到优先级高的没有的配置属性。


SpringBoot外部文件加载

将springboot打包为jar包后,启动过程中可以通过命令行的形式可以修改启动配置,也可以将配置文件放在和jar包同一目录下,然后进行启动会自动加载配置,如果当前目录下存在config目录,会优先加载config目录下的配置文件

SpringBoot自动配置

Condition自定义bean

在这里插入图片描述

创建一个classCondition对象实现springframework里面的Condition,然后重写matches方法通过返回值来进行创建bean的控制

在这里插入图片描述

自定义控制bean的创建有两种方式,一种是自已定义,通过实现Condition方法,进行重写matches,通过返回值来控制,这种只能静态的手动判断相应的坐标有没有导入,如果需要动态自定义控制bean则需要以下方式


在这里插入图片描述
在这里插入图片描述

如上图所示,我们先自定义一个注解标签,将我们需要控制的bean的方法上加上注解标签,用来收集需要控制的bean的依赖信息
在这里插入图片描述
在这里插入图片描述

然后创建一个类实现Condition接口,重写matches方法,在这个方法中有两个属性,其中第一个属性是context,使用context属性可以获取相应的上下文对象,获取环境,IoC容器,ClassLoader对象。其中第二个属性是metadata,使用metadata可以注解元对象,可以获取注解定义的属性值,我们的思路是使用第二个属性,然后通过我们自定义的注解,获取到其中的坐标名,然后通过遍历数组,getBean,来通过其中坐标名获取相应的bean,如果此时这个坐标没有导入,那么就不会获取到其中的bean,程序就回报错,然后通过try,catch来将返回值修改为false,此时就不会去创建bean。


在这里插入图片描述

刚才讲了自定义的条件,就是两种,但是其实SpringBoot中已经将我们刚才说的所有的自定义的注解已经都内部进行了封装定义,直接使用注解就可以实现,@ConditionalOnProperty:判断配置文件中是否有对应的属性和值,如果有就初始化Bean;ConditionalOnClass: 判断环境中是否有对应的字节码文件,如果有才初始化Bean;ConditionalOnMissionBean:判断环境中有没有对应的Bean,如果有才初始化Bean。


内置四种服务器,但是平时只用tomcat,通过如果的配置可以实现排除tomcat的依赖,引入jetty‘的依赖,其实实现依赖切换的原理和自定义初始化bean的原理相似,当pom文件中没有tomcat依赖,控制加载tomcat的服务器的bean控制器就不会进行创建,引入jetty的依赖后, 控制创建jetty那块bean的conditionl就回进行相应bean的初始化。

SpringBoot常用注解原理

在这里插入图片描述

在启动类上使用的是SpringBootApplication注解标签,当我们点进源码可以看到有三个主要的注解标签,@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan,这三个注解标签是SpringBoot启动的时候主要的注解标签先进行简单分析,点击SpringBootConfiguration可以看到@Configuration,在之前的Spring中就已经了解到Configuration注解标签是用来注解配置类的,所以启动类也就是配置类,可以在其中定义bean,@EnableAutoConfiguration是非常重要的,后面专门讲,@ComponentScan是一个包扫描组件,原理就和Spring那会的一样,是用来扫描并且创建bean的


EnableAutoConfiguration的注解

EnableAutoConfiguration注解是用来扫描和启动所有的注解标签,内部也是使用了组合注解,其中使用了import来导入需要扫描的注解标签。那么关于import的使用,在SpringBoot中我们是使用了@ComponentScan可以进行扫描当前项目目录下的所有启动注解标签,但是对于第三方的项目,我们是通过import注解标签来进行导入加载,像导入的依赖Redis,MySQL等都是通过import来进行自动加载,被加载的这些类都会被Spring创建,并放入IoC容器中。我们使用import要加载第三方的注解属性,需要一条一条的输入,比较麻烦,但是我们可以在第三方的项目中自定义一个注解,用于表示本包中需要扫描的类,然后需要使用这个第三方的组件的时候,通过第三方自定义的注解,即可直接进行扫描


import注解

在这里插入图片描述

@EnableAutoConfiguration

在这里插入图片描述

@EnableAutoConfiguration这个注解是springboot自动配置的核心,@EnableAutoConfiguration这个注解的内部使用@Import来加载配置类,在配置类中通过一系列的请求以及判断,最终都是要走向加载配置文件spring.factories,在该配置文件中定义了大量的配置类,当启动springboot的时候,这些配置类都会被启动,并且初始化相应的bean,但是并不是所有的bean都会加载,在每一个配置bean的时候都会有使用Condition条件注解,只有满足条件,才会初始化bean,用此来控制需要初始化的bean。

SpringBoot监听机制

在这里插入图片描述

第一个ApplicationContextInitializer,是在初始化的时候运行的,SpringApplicationRunListener启动的时候会触发生命周期,会在不同的时候做一些不同的事情。在启动springboot的时候,会默认执行CommandLineRunner和ApplicationRunner这两个接口的run方法。在这两个方法中可以执行一些启动时的操作,比如redis缓存,在平时我们需要第一次在redis缓存中拿取数据,这时候在springboot启动的时候我们可以通过这些启动类,来实现run方法,进而实现我们想要的功能。可以通过spring.factories来配置第一个启动,启动时机是在那个logo加载之后。然后可以通过配置启动第二个接口,但是需要通过公共构造方法启动,使用@Component

在这里插入图片描述
在这里插入图片描述

SpringBoot启动流程分析

初始化模块

在这里插入图片描述

当我们使用SpringApplication启动springboot的时候,首先会new 一个SpringApplication,也就是构造一个spring应用,构建这个应用首先会加载初始化模块,在初始化模块中会先配置source,检查配置是否web环境,还有创建初始化构造器,创建应用监听器,还有配置应用的主方法所在类。在创建初始化构造器的时候使用了自动配置。

在这里插入图片描述


启动模块

在这里插入图片描述

此时通过SpringApplicatino.run来启动,首先启动的时候会调用监听模块,会在启动相应的模块的时候去执行一些功能,其次会调用环境配置,然后加载配置的属性文件,然后调用logo文件,最后是上下文配置模块,在这块IoC的初始化容器会创建bean,在这部分需要加载配置,配置监听,并且准备bean的工厂,通过bean的工厂去生产bean

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/381225.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【JavaScript 漫游】【013】Date 对象知识点摘录

文章简介 本文为【JavaScript 漫游】专栏的第 013 篇文章&#xff0c;记录了 JS 语言中 Date 对象的重要知识点。 普通函数的用法构造函数的用法日期的运算静态方法&#xff0c;包括&#xff1a;Date.now()、Date.parse() 和 Date.UTC()实例方法&#xff0c;包括&#xff1a;…

以太网协议

以太网 .以太网协议格式&#x1f3a8;目的地址,源地址mac地址格式 . 以太网协议格式&#x1f3a8; 目的地址,源地址 此处的地址,叫做mac地址(物理地址),长度是6个字节 mac地址的作用也是用来区分不同的主机 IP地址的长度是4字节 IP地址负责网络层(整体)转发,mac地址负责数据链…

K8S之运用节点选择器指定Pod运行的节点

node节点选择器的使用 使用场景实践使用nodeName使用nodeSelectornodeName和nodeSelector混合使用1、设置了nodeName 和 设置 Node上都不存在的标签。看调度情况2、设置nodeName 为node1 和 设置 node2上才有的标签。看调度情况 实践总结 使用场景 默认情况&#xff0c;在创建…

计算机网络——05Internet结构和ISP

Internet结构和ISP 互连网络结构&#xff1a;网络的网络 端系统通过接入ISPs连接到互连网 住宅、公司和大学的ISPs 接入ISPs相应的必须是互联的 因此任何2个端系统可相互发送分组到对方 导致的“网络的网络”非常复杂 发展和演化是通过经济的和国家的政策来驱动的 问题&…

Windows下搭建Redis Sentinel

下载安装程序 下载Redis关于Windows安装程序&#xff0c;下载地址 下载成功后进行解压&#xff0c;解压如下&#xff1a; 配置redis和sentinel 首先复制三份redis.windows.conf&#xff0c;分别命名为&#xff1a;redis.6379.conf、redis.6380.conf、redis.6381.conf&…

多线程JUC:等待唤醒机制(生产者消费者模式)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;多线程&JUC&#xff1a;解决线程安全问题——synchronized同步代码块、Lock锁 &#x1f4da;订阅专栏&#xff1a;多线程&am…

【C语言】深入理解指针

目录 1.字符指针 2.指针数组 3.数组指针 4.数组传参与指针传参 一维数组传参 二维数组传参 一级指针传参 二级指针传参 5.函数指针 6.函数指针数组 7.指向函数指针数组的指针&#xff08;了解即可&#xff09; 8.回调函数 回调函数的应用&#xff1a;库函数qsort …

Codeforces Round 923 (Div. 3) E. Klever Permutation (Java)

比赛链接&#xff1a;Round 923 (Div. 3) EE题传送门&#xff1a;E. Klever Permutation 题目&#xff1a;E. Klever Permutation 样例 #1 样例输入 #1 5 2 2 3 2 10 4 13 4 7 4样例输出 #1 2 1 1 3 2 1 8 4 10 2 7 5 9 3 6 4 10 1 13 5 9 2 12 6 8 3 11 7 1 6 3 7 2 5 4分…

【06】C++ 模板初阶

文章目录 &#x1f308; Ⅰ 泛型编程&#x1f308; Ⅱ 函数模板1. 函数模板概念2. 函数模板格式 &#x1f308; Ⅰ 泛型编程 1. 泛型编程引入 假设当前要实现交换两个变量的功能&#xff0c;那么就得根据实参的数据类型来对该函数进行重载。重载的函数只是数据类型不同而已&a…

逐行拆解Guava限流器RateLimiter

逐行拆解Guava限流器RateLimiter 常见限流算法 计数器法 设置一个时间窗口内允许的最大请求量&#xff0c;如果当前窗口请求数超过这个设定数量&#xff0c;则拒绝该窗口内之后的请求。 关键词&#xff1a;时间窗口&#xff0c;计数器。 举个例子&#xff0c;我们设置1秒钟…

解决“使用Edge浏览器每次鼠标点击会出现一个黑色边框”的问题

目录 一 问题描述 二 解决方案 三 方案来源 四 参考资料 & AI工具 一 问题描述 为了方便进行收藏夹同步&#xff0c;开始从Chrome浏览器切换到Edge浏览器。在使用Edge浏览器过程中发现“每次鼠标点击会出现一个黑色边框”&#xff08;效果如下图所示&#xff09;&#…

基于物联网的实时数据分析(简单介绍)

在当今这个信息化、数字化飞速发展的时代&#xff0c;物联网&#xff08;Internet of Things, IoT&#xff09;和实时数据分析成为了技术革新的两大支柱。对于刚入行的新手来说&#xff0c;理解这两个概念及其相互作用不仅是迈入这一领域的第一步&#xff0c;更是掌握未来技术趋…

Android 粒子喷泉动效

一、前言&#xff1a; 在学习open gl es实现动效的时候&#xff0c;打算回顾了一下用普通的2D坐标系实现粒子效果和 open gl 3d 坐标系的区别&#xff0c;以及难易程度&#xff0c;因此本篇以Canvas 2D坐标系实现了一个简单的demo。 粒子动效原理&#xff1a; 粒子动效本质上…

Springboot 整合 Elasticsearch(二):使用HTTP请求来操作ES

&#x1f4c1;前情提要&#xff1a;Springboot整合Elasticsearch&#xff08;一&#xff09;&#xff1a;Linux下安装 Elasticsearch 8.x 目录 一、使用 elasticsearch-head 插件连接 1、下载压缩包 2、在 chrome 浏览器中添加扩展程序 3、修改IP地址&#xff0c;点击连接 …

Excel+VBA处理高斯光束

文章目录 1 图片导入与裁剪2 获取图片数据3 数据拟合 1 图片导入与裁剪 插入图片没什么好说的&#xff0c;新建Excel&#xff0c;【插入】->【图片】。 由于图像比较大&#xff0c;所以要对数据进行截取&#xff0c;选中图片之后&#xff0c;点击选项卡右端的【图片格式】…

Postgresql 的编译安装与包管理安装, 全发行版 Linux 通用

博客原文 文章目录 实验环境信息编译安装获取安装包环境依赖编译安装安装 contrib 下工具代码 创建用户创建数据目录设置开机自启动启动数据库常用运维操作 apt 安装更新源安装 postgresql开机自启修改配置修改密码 实验环境信息 Ubuntu 20.04Postgre 16.1 编译安装 获取安装…

HiveSQL——不使用union all的情况下进行列转行

参考文章&#xff1a; HiveSql一天一个小技巧&#xff1a;如何不使用union all 进行列转行_不 union all-CSDN博客文章浏览阅读881次&#xff0c;点赞5次&#xff0c;收藏10次。本文给出一种不使用传统UNION ALL方法进行 行转列的方法,其中方法一采用了concat_wsposexplode()方…

[经验] 喉咙沙哑的原因及应对方法是什么 #学习方法#其他#媒体

喉咙沙哑的原因及应对方法是什么 生活中&#xff0c;喉咙不舒服是很常见的情况&#xff0c;尤其是喉咙沙哑&#xff0c;让人感到特别难受&#xff0c;影响睡眠和生活质量。那么喉咙沙哑怎么办呢&#xff1f;接下来我会分享一些简单易行的方法&#xff0c;帮助你缓解这种不适感…

搭建yum仓库服务器

安装 1.安装linux 1.1安装依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel 1.2下载 cd /opt/nginx wget http://nginx.org/download/nginx-1.25.3.tar.gz 1.3解压 tar -xvf nginx-1.25.3.tar.gz 1.4配置 cd nginx-1.25.3 ./configure --pre…

【Larry】英语学习笔记语法篇——从句=连词+简单句

目录 三、从句连词简单句 1、必须有连词 主从结构 疑问词的词性 2、名词性从句 同位语从句 形式主语 形式宾语 that的省略 3、形容词性从句&#xff08;上&#xff09; 关系代词 关系词的作用 介词前置问题 4、形容词性从句&#xff08;中&#xff09; 定语关系…