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

11、springboot项目启动时对容器中的bean进行延迟初始化

springboot项目启动时对容器中的bean进行延迟初始化

预初始化:
Spring Boot在启动应用时,会启动Spring容器,当启动Spring容器时,Spring会自动初始化容器中所有的singleton Bean——这是默认行为
预初始化的好处:
1、项目启动时,就初始化了容器中所有的组件,因此后续提供服务时速度更快
2、项目启动时,就需要初始化了应用的所有的组件,这样就可提前发现项目中某个组件的错误。

延迟初始化:
启动Spring容器时,不初始化容器中任何Bean,而是等到应用需要某个Bean时,才去初始化该bean。
延迟初始化的好处:
降低内存开销——所有组件是按需启动的,因此有些组件可能根本不需要被启动,从而降低了系统开销

启动延迟初始化有如下3种方式:
方法1: 调用SpringApplicationBuilder对象的lazyInitialization(true)方法。
方法2: 调用SpringApplication对象的setLazyInitialization(true)方法。
方法3: 在application.properties文件中配置如下代码:spring.main.lazy-initialization=true

方法二:调用SpringApplication对象的setLazyInitialization(true)方法。
1、先在User类添加一个构造器,在方法体打印一句话,然后启动主配置类,发现打印成功,说明在启动项目的时候,就会预初始化容器中的这个User对象。
在这里插入图片描述

2、用方法二取消预初始化,启动延迟初始化。

问题: 如图,启动了延迟初始化,可是为什么这个User对象还是被预初始化了?

原因:
此处设置的延迟初始化仅对Spring Boot应用自动扫描的组件有效

对于用@Import或@ImportResouce方式额外导入的配置类或配置文件——它们可以指定自己的预初始化行为。

这个User对象就是通过xml 配置文件和@ImportResouce注解额外导入的,所以此处的延迟初始化对User对象无效。(XML自定义配置文件配置User对象)

因此上面所设置的启动延迟初始化的行为,对@Import或@ImportResouce所导入的配置文件是无效的。

在这里插入图片描述

这时候我们再定义一个Dog类,用注解@Component修饰,意味着这个类是spring容器中的一个组件,springboot应用会自动加载该组件。

默认的预初始化:
在这里插入图片描述

启动延迟初始化:
可以看出启动延迟初始化后,这个受springboot自动管理的Dog对象就没有在启动的时候被预初始化了。

在这里插入图片描述

针对这句:
对于用@Import或@ImportResouce方式额外导入的配置类或配置文件——它们可以指定自己的预初始化行为。
因此上面所设置的启动延迟初始化的行为,对@Import或@ImportResouce所导入的配置文件是无效的。
可以这么指定自己的与初始化行为:
对于自定义xml配置文件中的单个bean,想要其延迟初始化,可以在指定bean添加lazy-init=“false”。
在这里插入图片描述

如果想要整个自定义的xml配置文件的bean都延迟初始化,那么就在文件头添加: default-lazy-init=“true”
从启动日志中也可以看出没有初始化这个bean对象。
在这里插入图片描述

http://www.lryc.cn/news/103673.html

相关文章:

  • 树莓派镜像安装 + 设置 + 镜像批量化操作 - 自动化烧写SD Card (三)
  • C++继承特性(4)——友元与静态
  • VR党建主题数字互动虚拟展馆软件开启党建铸魂育人新篇章
  • 单网卡实现 双IP 双网段(内外网)同时运行
  • C# 委托2
  • 【计算机网络】网络层协议 -- IP协议
  • 记录浙政钉的消息通知的一次开发实战记录
  • 详解主流的Hybrid App 技术框架与研发方案
  • 【软件测试】性能测试工具- LoadRunner的介绍和使用
  • react
  • AI入门:了解人工智能的基础知识
  • ACL原理
  • EP4CE6E22C8N Error: Can‘t recognize silicon ID for device 1
  • vue3-seamless-scroll无缝滚动
  • 适配器模式——不兼容结构的协调
  • 【NVIDIA CUDA】2023 CUDA夏令营编程模型(一)
  • SHELL——备份脚本
  • VS创建wsdl服务提供给java调用
  • 盘点 TypeScript 内置类型
  • Netty 执行了多次channelReadComplete()却没有执行ChannelRead()
  • 直线导轨的精密等级以及划分依据
  • Ubuntu Server版 之 apache系列 常用配置 以及 隐藏 版本号 IP、Port 搭建服务案例
  • Kubernetes(K8s)从入门到精通系列之七:K8s的基本概念和术语之安全类
  • 网络安全(黑客)自学误区
  • 在OK3588板卡上部署模型实现人工智能OCR应用
  • 在linux中怎样同时运行三个微服务保证退出时不会终止
  • MD-MTSP:成长优化算法GO求解多仓库多旅行商问题MATLAB(可更改数据集,旅行商的数量和起点)
  • Python入门一
  • mysql_2.4——安装常见问题
  • 行业追踪,2023-07-31,板块多数都是指向消费