Spring中lazy-init属性

Spring中lazy-init属性

1. 在 Spring 框架中的 lazy-init 属性

在 Spring 框架中,lazy-init 属性主要用于控制 Spring 容器中 Bean 的初始化时机。

含义: 当一个 Bean 被定义在 Spring 的配置文件(可以是 XML 配置或者基于注解的配置等效场景)中时,通过设置 lazy-init 属性,可以指定这个 Bean 是在 Spring 容器启动时就立即初始化,还是等到第一次被使用时才进行初始化。

取值及作用

  • false(默认值,在某些早期版本中可能是 true,但现在普遍默认 false:当 lazy-init="false" 时,意味着在 Spring 容器启动过程中,一旦解析到该 Bean 的定义,就会立即对其进行初始化操作。初始化操作包括创建 Bean 的实例、执行依赖注入(如果有)、调用初始化方法(如果配置了)等一系列步骤。例如,对于一个数据库连接池的 Bean,如果设置为 false,那么在容器启动时就会提前创建好连接池实例,准备好供后续业务使用。

  • true:若 lazy-init="true",则该 Bean 不会在 Spring 容器启动时初始化。而是等到应用程序中第一次真正需要使用这个 Bean 时,Spring 容器才会对其进行初始化操作。比如,有一个用于处理特定业务逻辑且使用频率不高的 Bean,设置为 lazy-init="true" 后,就可以节省容器启动时不必要的资源消耗和初始化时间,只有当该业务逻辑真正被触发需要这个 Bean 时,它才会被初始化并投入使用。

2. 代码控制
基于 XML 配置方式

在传统的 XML 配置文件中,可以在<bean>元素里设置lazy-init属性来控制 Bean 的初始化时机。

示例如下:

 <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.springframework.org/schema/xsi"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsi">​<!-- 定义一个普通的Bean,设置为立即初始化(默认情况) --><bean id="normalBean" class="com.example.demo.NormalBean"><!-- 这里可以设置其他属性和依赖注入等 --></bean>​<!-- 定义一个延迟初始化的Bean --><bean id="lazyInitBean" class="com.example.demo.LazyInitBean" lazy-init="true"><!-- 同样可以设置其他属性和依赖注入等 --></bean>​</beans>

在上述示例中:

  • normalBean 没有显式设置 lazy-init 属性,所以它会按照默认情况(在 Spring 版本较新时默认值为 false,即立即初始化)在 Spring 容器启动时就进行初始化。

  • lazyInitBean 则通过设置 lazy-init="true",会在容器启动时不进行初始化,而是等到第一次被使用时才进行初始化。

基于注解配置方式

Spring 也提供了注解来实现类似的功能,常用的注解有 @Component@Service@Repository@Controller 等,这些注解用于标识不同类型的组件(类),可以结合 @Lazy 注解来控制 lazy-init 属性。

示例如下:

 package com.example.demo;​import org.springframework.context.annotation.Component;import org.springframework.context.annotation.Lazy;​// 这是一个普通的组件类,默认会在容器启动时初始化@Componentpublic class NormalComponent {// 类的内部实现}​// 这是一个延迟初始化的组件类@Component@Lazy(true)public class LazyComponent {// 类的内部实现}

在上述示例中:

  • NormalComponent 类只使用了 @Component 注解,它会按照默认情况(类似于 XML 配置中的默认 lazy-init="false")在容器启动时就被初始化。

  • LazyComponent 类除了使用 @Component 注解标识自己是一个组件外,还使用了 @Lazy(true) 注解,这就相当于设置了 lazy-init="true",使得该类在 Spring 容器启动时不会被初始化,而是等到第一次被使用时才进行初始化。

另外,如果是在 Spring Boot 项目中,很多时候会使用 @SpringBootApplication 启动类注解来自动扫描组件。上述的基于注解的配置方式同样适用,只要在需要延迟初始化的类上添加相应的注解即可。

基于 Java 配置类方式

除了 XML 和注解配置外,还可以通过 Java 配置类来设置 lazy-init 属性。

首先创建一个 Java 配置类:

 package com.example.demo;​import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Lazy;​@Configurationpublic class AppConfig {​// 定义一个立即初始化的Bean@Beanpublic NormalBean normalBean() {return new NormalBean();}​// 定义一个延迟初始化的Bean@Bean@Lazy(true)public LazyBean lazyBean() {return new LazyBean();}}

在上述示例中:

  • normalBean() 方法定义了一个普通的 Bean,它会按照默认情况(类似于 XML 配置中的默认 lazy-init="false")在容器启动时就被初始化。

  • lazyBean() 方法定义了一个延迟初始化的 Bean,通过添加 @Lazy(true) 注解,相当于设置了 lazy-init="true",使得该 Bean 在容器启动时不会被初始化,而是等到第一次被使用时才进行初始化。

通过以上几种方式,就可以在 Spring 框架中根据具体需求在代码中灵活控制 lazy-init 属性,以达到优化资源利用和提升应用性能的目的。

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

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

相关文章

多处理机调度(李昂学长视频总结)25新增考点

多处理机定义&#xff1a;多处理机指的是某个计算机系统中有多个cpu&#xff0c;在多处理机调度中&#xff0c;多处理机一般指的是共享存储器处理机&#xff0c;其两个或更多的cpu全部共享一个公用的RAM。 根据系统中的处理机相同与否&#xff0c;可将多处理机系统分为如下两类…

开源目标检测和语义分割都有哪些方法

在开源社区中&#xff0c;目标检测和语义分割都有许多广泛使用的方法和框架&#xff0c;以下是一些主流的方法&#xff1a; 1. 目标检测方法 目标检测的主要任务是识别图像中的物体并给出其位置&#xff08;通常为边界框&#xff09;&#xff0c;以下是常用的开源方法&#x…

少儿编程培训市场突破500亿元:教育新蓝海的崛起与未来展望

近年来&#xff0c;随着科技的迅速发展和家长对教育方式的重视&#xff0c;少儿编程市场成为一片新的蓝海。据最新市场调研报告显示&#xff0c;2024年中国少儿编程培训市场规模已突破500亿元&#xff0c;预计未来五年将持续增长。这一趋势反映了少儿编程教育的迅速崛起&#x…

【大数据学习 | kafka】producer的参数与结构

1. producer的结构 producer&#xff1a;生产者 它由三个部分组成 interceptor&#xff1a;拦截器&#xff0c;能拦截到数据&#xff0c;处理完毕以后发送给下游&#xff0c;它和过滤器不同并不是丢弃数据&#xff0c;而是将数据处理完毕再次发送出去&#xff0c;这个默认是不…

【论文速读】Optimization-based Prompt Injection Attack to LLM-as-a-Judge

基于优化的提示词注入攻击 摘要引言问题描述LLM-as-a-judge威胁模型攻击者知道什么 JUDGEDECEIVER 细节概述生成影子候选回复公式化为优化问题Target-aligned generation lossTarget-enhancement lossAdversarial perplexity loss优化问题 求解优化问题 摘要 LLM-as-a-Judge 利…

人工智能证书合集

本文将对目前市面上主流官方机构颁发的人工智能证书进行整理和介绍&#xff0c;由于整理的证书较多&#xff0c;本文共一万八千多字&#xff0c;请根据自己的考证需求阅读对应部分的内容&#xff0c;希望本文对人工智能行业的从业人员和计划从事人工智能相关岗位工作的人员有所…

Java入门8——二维数组

今天的内容算是数组的收尾~~ 从下次开始就要开始学习类和对象了&#xff0c;冲冲冲&#xff01; 首先二维数组&#xff0c;也很好理解&#xff0c;就是把几个一维数组拼在一起了&#xff0c;我们用代码来熟悉一下~ public class javaSchool {public static void main(String[…

自动售饮料机控制电路的设计

自动售饮料机控制电路的设计 1 设计目的 &#xff08;1&#xff09;熟悉数字电路的应用。 &#xff08;2&#xff09;掌握常常利用逻辑运算器及D触发器的逻辑功能及利用方式。 &#xff08;3&#xff09;熟悉电路仿真软件Multisim 利用。 &#xff08;4&#xff09;了解自动售饮…

高速高精运动控制解决方案亮相2024 NEPCON亚洲电子展!

■展会名称&#xff1a; NEPCON ASIA 2024 亚洲电子生产设备暨微电子工业展览会&#xff08;以下简称“亚洲电子展”&#xff09; ■展会日期 2024年11月6 -8日 ■展馆地点 中国深圳国际会展中心(宝安) ■展位号 11号馆-11A24 11月6日至8日&#xff0c;亚洲电子展将在中…

Flask轻松上手:从零开始搭建属于你的Web应用

目录 一、准备工作 二、安装Flask 三、创建你的第一个Flask应用 创建一个新的Python文件 编写Flask应用代码 运行Flask应用 四、创建一个简单的博客系统 定义路由和文章列表 创建模板文件 运行并测试博客系统 五、使用数据库存储用户信息 安装Flask-SQLAlchemy 修…

STM32开发 —— 新工程创建思路终于清晰了

目 录 工程创建三步法一、工程文件夹创建二、管理工程项三、配置工程参数 工程创建三步法 从ST官网下载好stm32标准库或HAL库&#xff0c;HAL库目录如下。 在Keil开发环境中创建STM32工程&#xff0c;分三大步即可完成工程的创建&#xff1a; 一步&#xff1a;在本地磁盘创建…

Java SpringBoot调用大模型AI构建AI应用

本文是一个用springboot 结合spring mvc 和spring ai alibaba 调用国产大模型通义千问的具体例子&#xff0c;按照这个做能够快速的搞定Java应用的调用。 然后就可以把这类应用泛化到所有的涉及到非结构化数据结构化的场景中。 Spring AI&#xff1a;简化Java中大模型调用的框…

【办公类-04-04】华为助手导出照片视频分类(根据图片、视频的文件名日期导入“年-月-日”文件夹中,并转移到“年-月”文件中整理、转移到“年”文件夹中整理)

背景需求 最近带班&#xff0c;没有时间整理照片&#xff0c;偶尔导一次&#xff0c;几个月的照片。发现用电脑版“华为手机助手“中的WLAN连接”与华为手机的“华为手机助手”连接&#xff0c;速度更快、更稳定&#xff0c;不会出现数据线连接时碰碰就断网的问题 1、先打开电…

电脑没有下载声卡驱动怎么办?电脑声卡驱动安装方法

在日常使用电脑的过程中&#xff0c;我们可能会遇到电脑没有声音的问题&#xff0c;这往往与声卡驱动缺失或损坏有关。声卡驱动是连接电脑硬件&#xff08;声卡&#xff09;与操作系统之间的桥梁&#xff0c;确保音频信号能够正常输入输出。那么&#xff0c;当电脑没有声卡驱动…

MYSQL死锁真实案例

​最近例行巡检时候发现一个死锁,阿里云RDS FOR MYSQL 8.0.X! 虽然阿里云的死锁页面看起来比较友好,不过跟社区版一样只是显示事务最后一条死锁SQL和相关的信息.一不小心对初级MYSQL DBA来说,深深地误导,浪费大量时间研究这两个SQL怎么发生了死锁! 阿里云RDS默认情况下审计没有…

CSS3简介(一)

1、CSS3简介 CSS3&#xff08;层叠样式表3级&#xff09;是用于控制网页外观设计的一种样式表语言&#xff0c;它是CSS2的继承者&#xff0c;并且是目前最为先进的版本之一。CSS3为Web设计师提供了更多功能强大的工具来创建更加动态和美观的网站。 以下是一些CSS3的主要特点和新…

【ShuQiHere】探索等差数列:数学中的基础与应用 ✨

【ShuQiHere】 &#x1f4d0;✨ 在数学的广阔领域中&#xff0c;等差数列&#xff08;Arithmetic Sequence&#xff09;是一个基础而重要的概念。无论是在学术研究、工程应用&#xff0c;还是在日常生活中&#xff0c;等差数列都扮演着关键角色。本博客将深入探讨等差数列的定…

【Spring】Spring Boot 日志(8)

本系列共涉及4个框架&#xff1a;Sping,SpringBoot,Spring MVC,Mybatis。 博客涉及框架的重要知识点&#xff0c;根据序号学习即可。 目录 本系列共涉及4个框架&#xff1a;Sping,SpringBoot,Spring MVC,Mybatis。 博客涉及框架的重要知识点&#xff0c;根据序号学习即可。 …

Flink处理乱序的数据的最佳实践

目录 网络延迟和分布式系统 事件时间与处理时间的差异 事件时间和水位线(Watermark) 时间窗口(TimeWindow) 滚动窗口(Tumbling Window) 滑动窗口(Sliding Window) 会话窗口(Session Window) 自定义Watermark生成策略 设置允许延迟和侧输出 设置允许的最大延迟时间 使…

饿了么数据库表设计

有商家表、商品表、商品规格表、购物车表&#xff0c;不难分析出表是不够全面的。 (1)首先分析需要补充的表 1.对于购物车而言肯定有对应的用户&#xff0c;因此要添加一个用户表。 2.商品规格是冷&#xff0c;热&#xff0c;半分糖、全糖&#xff0c;对于冷热和半分糖是可以分…