SpringBoot终极讲义第二章笔记

news2025/4/18 0:53:34
01.关于@Import 和 @ImportResource  

@Import注解用法(类上): 一般和@Configuration一起使用,用来导入里面@Bean方法返回的对象

@ImportResource(类上):一般和@Configuration一起使用,用来导入某个.XML文件里的bean

个人觉得这两个注解有点鸡肋

SpringBoot启动类默认扫描的是启动类包所在目录及其子包目录且SpringBoot启动类本身就是一个配置类

这是一个简单的SpringBoot项目,只引入了web,热部署和lombok

MyConfig1和启动类同包,MyConfig2不同包,myconfig3是个Spring的.xml文件

同包及子包下可以获取配置类的bean对象也可以获取到加了@Bean注解的对象(默认方法名)

但是要获取MyConfig2里的@Bean返回对象需要加@Import(MyConfig2.class),即使加了,你也不能获取到类对象

 

为什么说@Import(xxx.class)鸡肋呢?我用这个不行么?

02.关于SpringBoot的启动日志和失败分析器

启动日志如图   默认INFO级别

失败分析器  例如 我用插件方式再启动一次,提示端口被占用

将信息复制出来

***************************
APPLICATION FAILED TO START
***************************

Description:   这个是失败描述信息

Web server failed to start. Port 8080 was already in use.  

Action:  这个是对该失败的修复意见

Identify and stop the process that's listening on port 8080 or configure this application to listen on another port.

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  6.887 s
[INFO] Finished at: 2023-10-02T02:10:31+08:00
[INFO] ------------------------------------------------------------------------

Process finished with exit code 0
 

这个是由SpringBoot内置的失败分析器提供的

感觉这个就是在玩么........................

自定义一个失败分析器   继承  AbstractFailureAnalyzer<T>

另外操作

这拿来耍酷么???什么鬼东西 

03.延迟初始化

Spring Boot 启动会默认实例化和初始化所有的单例(Singleton)Bean

当然预初始化是有好处的,不然也不会默认.

1.项目启动时就初始化了容器中所有的组件,因此后续提供服务时,速度更快.

2.启动就初始化应用所有组件,可提前发现项目中某个组件的错误.

------------------------------------------------------------------------------------------------------------

那么有些时候延迟初始化,或者说,需要某个Bean时候才去初始化.可以降低内存开销

延迟初始化的方式:

1.调用SpringApplicationBuilder对象的lazyInitialization(true)

           针对SpringApplicationBuilder构建的Bean(刚学的就是全部是吧)   全局的

2.调用SpringApplication对象的setLazyInitialization(true)   全局的

3.在application.properties文件中配置                全局的

        spring.main.lazy-initialization=true

下面演示三种全局延迟加载方式

创建一个类,定义无参构造

默认情况下启动就会被实例化,交给Spring容器管理

第一种方式:调用SpringApplicationBuilder对象的lazyInitialization(true)

修改启动类.可以看到TestController的构造并没有被调用

注意对于使用@Import或者@ImportResource 导入的Bean无效  

用这两个注解导入的Bean可以用自己的配置方式:如xml的话 <bean>里可以指定延迟加载

第二种方式:调用SpringApplication对象的setLazyInitialization(true)  注意点和第一种方式一样

第三种就是

其实实际工作中,全局延迟加载用到的肯定少,除非真的内存不够

如何做局部或者单例的延迟加载呢

1.加上@Lazy注解

2.用@Conditional注解

 

这两个参数是啥自己查,挺好玩,有内涵

  1. ConditionContext context:表示条件的上下文,提供了有关当前条件的执行环境的信息。通过这个上下文,你可以访问 Spring 应用程序上下文、Bean 工厂以及其他条件相关的信息。

  2. AnnotatedTypeMetadata metadata:表示与条件关联的注解元数据。通过这个元数据,你可以获取与条件相关的注解信息,例如 @Conditional 注解的属性等。

04.自定义Banner(这个大概了解,不想写)

在application.properties中

可以通过

spring.main.banner-mode属性对banner进行控制

console:表示在控制台输出

log:表示在日志文件输出

off:表示关闭Banner

05.设置SpringApplication

在SpringBoot的启动类中,我们一般都是

SpringApplication.run(类名.class,args)这种方式启动的,就是调用了SpringApplication的静态run方法,但是都没有对SpringApplication有多少了解.

ChatGPT大概这样解释:

SpringApplication是SpringBoot应用程序的启动引导类,封装了应用的启动过程,过程包括初始化Spring上下文,应用程序的配置,自动配置,组件扫描等 简化了SpringBoot应用程序的开发和部署.通过SpringApplication,开发人员可以轻松的创建,配置和启动SpringBoot引用程序

设置SpringApplication两种方式

1.通过SpringApplication对象的setter方法进行设置,然后调用run()实例方法启动SpringBoot应用

2.通过SpringApplicationBuilder的流式API进行设置,最后调用run方法启动SpringBoot应用

SpringApplicationBuilder是SpringApplication的构建器

先来感受下SpringApplication到底什么鬼

看样子SpringApplication就是用来在启动前,搞事情用的.

比如我这样就关闭了Banner

用SpringApplicationBuilder设置

注意:上面注释可能写的模糊了点.父容器,子容器,好比继承关系,并不是大装小的关系,可以比作多个Spring容器

效果是:父容器不能访问子容器,但是子容器可以访问父容器.

06.监听器

个人认为在SpringBoot中,监听器分为两种

1.监听SpringBootApplication的监听器

2.传统Spring监听器

1.监听SpringBootApplication的监听器

        1.1)调用SpringApplication的addListeners()或SpringApplicationBuilder的Listeners()方法添          加事件

        1.2)用META-INF/spring.factories文件来配置事件监听器.在该文件中添加如下代码即可注册            事件监听器  例如  org.springframework.context.ApplicationListener=xxx.xxx.xxx.MyListener

 

 注意:META-INF/spring.factories

SpringApplication依次触发的事件

1.触发ApplicationStartingEvent事件

2.触发ApplicationEnvironmentPreparedEvent事件

3.触发ApplicationContextInitializedEvent事件

4.触发ApplicationPreparedEvent事件

5.触发ApplicationStartedEvent事件 

            该事件结束后才执行ApplicationRunner和CommandLineRunner两接口的回调函数

6.触发AvailabilityChangeEvent事件

7.触发ApplicationReadyEvent事件

8.触发AvailabilityChangeEven事件

9.触发ApplicationFailedEvent事件

事件这么多,但是我们如何使用监听器呢????

定义监听器

1.该监听器交由Spring管理

2.实现ApplicationListener接口泛型写你需要监听的事件

3.重写方法

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电子地图 | VINS-FUSION | 小觅相机D系列

目录 一、相关介绍 二、VINS-FUSION环境安装及使用 &#xff08;一&#xff09;Ubuntu18.04安装配置 1、Ubuntu下载安装 2、设置虚拟内存&#xff08;可选&#xff09; &#xff08;二&#xff09;VINS-FUSION环境配置 1、ros安装 2、ceres-solver安装 3、vins-fusion…

智慧公厕与传统公共厕所对比五大优势是什么?

随着科技的不断发展&#xff0c;智慧公厕成为城市建设的新亮点。与传统公共厕所相比&#xff0c;它具备许多独特优势和巨大的价值。本文将以智慧公厕领先厂家广州中期科技有限公司&#xff0c;大量精品案例项目实景实例实图&#xff0c;深入探讨智慧公厕的各个方面的特点&#…

PHP禁止单个用户多设备同时登陆,限制单个用户在多端重复登录

逻辑简单,主要是3点&#xff1a; 1.登录的时候写入一个最新的登录IP到user表其中一个last_login_ip字段 2.登录成功的时候,转入到index控制器或者index方法之前先进行查询&#xff1a; 1).当前IP 2).数据库字段当前用户存储的last_login_ip里面的IP 3.然后进行判断&#xff0…

前端面试题:在浏览器输入url回车后发生什么?浏览器渲染页面详细流程

❤️在浏览器输入url回车后 可以分为八步 解析url并且判断其合法性DNS解析url到指定的ip建立TCP连接&#xff08;3次握手&#xff09;发送HTTP请求&#xff08;请求行/头/体&#xff09;服务器处理收到的请求&#xff0c;将数据返回浏览器浏览器收到HTTP响应浏览器解析并渲染页…

Linux基本操作符(2)

W...Y的主页 &#x1f60a; 代码仓库分享 &#x1f495; 关于Linux的操作符&#xff0c;在上篇博客中我们已经讲述了一些&#xff0c;都是Linux最基本的操作符。今天我们继续了解一些关于对文件及目录增删查改的操作符&#xff0c;话不多说我们直接上内容。 目录 rm指令的回…

RAID知识点总结

目录 RAID类型 RAID的数据组织及存取方式 RAID热备与重构 RAID逻辑卷 常见的RAID RAID0 RAID 1 RAID3 RAID 5 RAID 6 RAID组合 RAID 10 RAID 50 总结 RAID技术对比 RAID的应用场景 RAID2.0 使用RAID2.0的原因 RAID2.0的发展 RAID2.0技术&#xff1a;两层虚拟…

【C语言数据结构——————栈和队列4000字详解】

欢迎阅读新一期的c语言数据结构模块————栈和队列 ✒️个人主页&#xff1a;-_Joker_- &#x1f3f7;️专栏&#xff1a;C语言 &#x1f4dc;代码仓库&#xff1a;c_code &#x1f339;&#x1f339;欢迎大佬们的阅读和三连关注&#xff0c;顺着评论回访&#x1f339;&#…

【Redis】简单动态字符串SDS

C语言字符串 char *str "redis"; // 可以不显式的添加\0&#xff0c;由编译器添加 char *str "redis\0"; // 也可以添加\0代表字符串结束C语言中使用char*字符数组表示字符串&#xff0c;‘\0’来标记一个字符串的结束&#xff0c;不过在使用的过程中我…

CAA DMU模块仿真

背景 本人由于项目原因&#xff0c;需要基于CATIA格式文件研究CAM的一些操作&#xff0c;其中就包括仿真功能&#xff0c;而CATIA中适合实现仿真功能的模块就是 DMU (Digital Mock-Up) 模块&#xff0c;本人研究了很长时间&#xff0c;尝试了很多方案&#xff0c;特地记录下来…

华为云云耀云服务器L实例评测|Docker部署及应用

文章目录 前言&#x1f4e3; 1.前言概述&#x1f4e3; 2.服务器攻击✨ 2.1 问题描述✨ 2.2 处理方法 &#x1f4e3; 3.Docker简介&#x1f4e3; 4.安装Docker✨ 4.1 卸载旧版docker✨ 4.2 安装依赖包✨ 4.3 安装GPG证书✨ 4.4 配置仓库✨ 4.5 正式安装Docker✨ 4.6 配置用户组✨…

Spring Boot的魔法:构建高性能Java应用

文章目录 Spring Boot&#xff1a;简化Java开发Spring Boot的性能优势1. 内嵌服务器2. 自动配置3. 起步依赖4. 缓存和优化5. 异步处理 实际示例&#xff1a;构建高性能的RESTful API总结 &#x1f389;欢迎来到架构设计专栏~Spring Boot的魔法&#xff1a;构建高性能Java应用 ☆…

洛谷P1102 A-B 数对题解

目录 题目A-B 数对题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示传送门 代码解释亲测 题目 A-B 数对 题目背景 出题是一件痛苦的事情&#xff01; 相同的题目看多了也会有审美疲劳&#xff0c;于是我舍弃了大家所熟悉的 AB Problem&#xff0c;改用 …

Python与Scrapy:构建强大的网络爬虫

网络爬虫是一种用于自动化获取互联网信息的工具&#xff0c;在数据采集和处理方面具有重要的作用。Python语言和Scrapy框架是构建强大网络爬虫的理想选择。本文将分享使用Python和Scrapy构建强大的网络爬虫的方法和技巧&#xff0c;帮助您快速入门并实现实际操作价值。 一、Pyt…

“链圈”十年反思

2013 年 11 月&#xff0c;Vitalik Buterin 发表了以太坊白皮书的第一个版本。事后人们经常把这视为“区块链 2.0” 时代开启的标志&#xff0c;但在当时&#xff0c;其实是以太坊的出现才使得“区块链”作为一项单独的技术从“数字货币”当中分离出来。换句话说&#xff0c;比…

基于Java的大学生英语考试答题系统设计与实现(亮点:答题系统、报名系统、在线视频、在线聊天、附件下载)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

2023 年最佳多 GPU 深度学习系统指南

动动发财的小手&#xff0c;点个赞吧&#xff01; 本文[1]提供了有关如何构建用于深度学习的多 GPU 系统的指南&#xff0c;并希望为您节省一些研究时间和实验时间。 1. GPU 让我们从有趣&#xff08;且昂贵&#xff09;的部分开始&#xff01; 购买 GPU 时的主要考虑因素是&am…

flutter开发实战-webview插件flutter_inappwebview使用

flutter开发实战-webview插件flutter_inappwebview使用 在开发过程中&#xff0c;经常遇到需要使用WebView&#xff0c;Webview需要调用原生的插件来实现。常见的flutter的webview插件是webview_flutter&#xff0c;flutter_inappwebview。之前整理了一下webview_flutter&…

htb-cozyhosting

HTB-CozyHosting https://app.hackthebox.com/machines/CozyHosting ──(kwkl㉿kwkl)-[~] └─$ tail -l /etc/hosts …

凉鞋的 Unity 笔记 103. 检视器:GameObject 的微观编辑和查看

103. 检视器&#xff1a;GameObject 的微观编辑和查看 在上一篇&#xff0c;笔者简单介绍了场景层次 与 GameObject 的增删改查&#xff0c;如下所示&#xff1a; 在这一篇&#xff0c;我们接着往下学习。 我们知道在 场景层次 窗口&#xff0c;可以对 GameObject 进行增删改…

金融帝国实验室(CapLab)官方更新_V9.1.15版本(2023年第64次)

〖金融帝国实验室〗&#xff08;Capitalism Lab&#xff09;游戏更新记录&#xff08;2023年度&#xff09; ————————————— ◎游戏开发&#xff1a;Enlight Software Ltd.&#xff08;微启软件有限公司&#xff09; ◎官方网站&#xff1a;https://www.capitalis…