给你的项目启动提提速:Lazy Initialization

这篇具有很好参考价值的文章主要介绍了给你的项目启动提提速:Lazy Initialization。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

给你的项目启动提提速:Lazy Initialization

前言

  在一个名为种花家的小镇上,生活着一群热爱编程的人。他们致力于构建出高效、可维护的软件系统,而 Spring Boot 框架成为了他们的不二之选。这个小镇上的人们每天都在用 Spring Boot 框架创造着令人瞩目的应用程序。

  然而,随着时间的推移,他们的应用程序变得越来越庞大,包含了许多不同的模块和组件。在应用程序启动的时候,所有的 bean 都会被一次性初始化,这导致了一个令人头疼的问题:启动时间变得越来越长了。

  小镇的居民们开始感到困扰。他们意识到,无论是在开发环境还是在生产环境中,启动时间的长短都直接关系到他们的工作效率和用户体验。于是,他们寻找一种解决方案,希望能够在保证应用程序正常运行的同时,减少启动时间的开销。

  正当大家纠结不已时,一个编程少侠出现了。他名叫不一样的科技宅,他告诉大家,有一种叫做"延迟初始化"的策略,可以帮助他们解决这个问题。

  据说,延迟初始化能够将 bean 的初始化推迟到第一次使用时进行,而不是在应用程序启动时立即初始化。这样一来,只有当某个 bean 真正被需要时,才会进行初始化,避免了不必要的资源消耗和时间开销。

是什么?

  延迟初始化(Lazy Initialization)是一种在需要时才创建或加载对象的策略,以减少启动时间和资源消耗。在 Spring 中,延迟初始化允许将 Bean 的创建推迟到第一次访问该 Bean 时才进行,而不是在应用程序启动时立即创建。

给你的项目启动提提速:Lazy Initialization

有啥用?

节省资源

  当应用程序中存在大量的 bean 时,立即初始化所有 bean 可能会占用大量的内存和处理时间。通过延迟初始化,只有在需要使用 bean 时才会进行初始化,可以避免不必要的资源消耗。

加快启动时间

  延迟初始化可以减少应用程序启动时间,因为只有在需要时才会加载和初始化 bean。对于那些在应用程序启动时可能不会使用的较大或复杂的 bean,延迟初始化可以显著加快启动时间。

解决循环依赖

  Spring 容器可以管理 bean 之间的依赖关系。当存在循环依赖时,延迟初始化可以帮助解决这个问题。通过延迟初始化,Spring 容器可以在运行时逐个解析和满足 bean 之间的依赖,而不是在初始化阶段发现无法解决的循环依赖。

如何实现?

Spring Boot 中实现延迟初始化 Bean,可以采取以下四种方法:

  1. 对于使用注解配置的 Bean,可以在 Bean 的定义上使用 @Lazy 注解来实现延迟初始化。

示例:

@Lazy
@Component
public class MyBean {
    // Bean 的定义
}
  1. 对于使用 Java 配置类的方式,可以在 @Bean 注解上使用 @Lazy 注解,以实现延迟初始化。

示例:

@Configuration
public class AppConfig {
    @Lazy
    @Bean
    public MyBean myBean() {
        // Bean 的定义
        return new MyBean();
    }
}
  1. 对于 XML 配置的 Bean,可以在 <bean> 元素上设置 lazy-init 属性为 true,以实现延迟初始化。

示例:

<bean id="myBean" class="com.example.MyBean" lazy-init="true" />
  1. 对于使用@ComponentScan注解,可以配置属性lazyInit = true 实现某些包下面所有的 bean 延迟初始化。

示例:

package com.example.demo.bean;

import org.springframework.stereotype.Component;

@Component
public class MyBean {

    public MyBean() {
        System.out.println("My bean init success.");
    }
}

@SpringBootApplication
@ComponentScan(value = "com.example.demo.bean", lazyInit = true)
public class DemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}

}

全局懒加载

  上面演示案例,意味着我们只能对自己实现的 bean 进配置。但是项目中肯定会引入很多第三方的 starter,比如 redis,mq。如果想对引入的第三方库进行配置,那就不太容易了,所以我们可以开启全局懒加载。

配置文件增加下面的配置:

spring:
  main:
    lazy-initialization: true  #默认false 关闭

开启了全局懒加载,想要过滤某个 bean,可以通过设置 @Lazy(false) 排除。

@Component
@Lazy(false)
public class MyBean {

    public MyBean() {
        System.out.println("My bean init success.");
    }
}

还有一种是通过配置 LazyInitializationExcludeFilter 规则实现排除。

@Configuration
public class AppConfig {

    @Bean
    LazyInitializationExcludeFilter integrationLazyInitExcludeFilter() {
        return LazyInitializationExcludeFilter.forBeanTypes(MyBean.class);
    }
}

给你的项目启动提提速:Lazy Initialization

注意的点

@Lazy 注解的使用

  要确保在正确的位置使用@Lazy 注解。通常情况下,将其添加在 Bean 的定义上,例如@Component、@Service、@Repository 等注解上。这样可以确保被标记的 Bean 在第一次使用时才会进行初始化。

依赖关系的处理

  懒加载的 Bean 可能会被其他 Bean 所依赖。在处理依赖关系时,要确保依赖的 Bean 已经被初始化或者也进行了懒加载。否则,可能会导致依赖注入失败或出现异常。

延迟初始化带来的影响

  懒加载虽然可以提高应用的启动性能,但也会带来一些影响。由于 Bean 的初始化被延迟到第一次使用,因此在初始化时可能会出现较长的延迟,对于需要立即使用的 Bean 可能会造成一定的等待时间。

内存消耗的控制

  懒加载虽然可以减少应用启动时的内存消耗,但也需要注意对内存的控制。如果应用中存在大量的懒加载 Bean,并且这些 Bean 在实际使用中并不频繁,可能会导致过多的内存占用。因此,需要根据应用的具体情况,合理使用懒加载,避免过度消耗内存。

运行时异常的处理

  由于懒加载将 Bean 的初始化延迟到运行时,因此在初始化过程中可能会发生异常。要确保适当地处理这些异常,以防止应用的崩溃或不可预料的行为。

给你的项目启动提提速:Lazy Initialization

总结

  懒加载是一种延迟加载的技术,用于在需要时才加载资源,而不是在应用启动时加载所有资源。在 Spring Boot 框架中,有两种方式可以实现懒加载:Spring 懒加载和全局懒加载。无论是懒加载还是全局懒加载,它们都能提升应用的性能和效率,避免不必要的资源加载。

  在使用 Spring 懒加载需要注意正确的注解使用、处理依赖关系、延迟初始化带来的影响、内存消耗控制和异常处理等方面。合理地使用可以提高应用性能,但也需要综合考虑应用的需求和场景,以确保有效性和稳定性。

给你的项目启动提提速:Lazy Initialization

结尾

  如果觉得对你有帮助,可以多多评论,多多点赞哦,也可以到我的主页看看,说不定有你喜欢的文章,也可以随手点个关注哦,谢谢。

  我是不一样的科技宅,每天进步一点点,体验不一样的生活。我们下期见!文章来源地址https://www.toymoban.com/news/detail-438574.html

到了这里,关于给你的项目启动提提速:Lazy Initialization的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 给你的H5页面加上惯性滚动吧!

    在移动端,如果你使用过 overflow: scroll 生成一个滚动容器,会发现它的滚动是比较卡顿,呆滞的。为什么会出现这种情况呢? 因为我们早已习惯了目前的主流操作系统和浏览器视窗的滚动体验,比如滚动到边缘会有回弹,手指停止滑动以后还会按惯性继续滚动一会,手指快速

    2024年03月17日
    浏览(79)
  • 怎么给你的vitepress添加图片放大预览效果

    基于markdown-it 可设置自定义属性的插件 效果预览地址传送 Step. 1: 安装依赖 Step. 2: 引入插件 Step. 3: 配置 vitepress config.js文件 Step. 4: 引入图片灯箱js和css文件 配置 .vitepress/config.js 文件 加入 head 配置 Step. 5: 渲染效果

    2024年02月14日
    浏览(37)
  • 只用3步,给你的日语视频加上中日双语字幕

    很多日语电影或者日剧,都没有带字幕。对于想马上看到视频,但是又不懂日语的朋友来说,就只能等字幕组做好字幕发出来才能看了。 这里教大家用33字幕这个软件,去给影片快速生成中日双语字幕,让你在第一时间就能欣赏影片内容。 废话不多说,下面让我们开始吧。

    2024年02月04日
    浏览(35)
  • 探索Web API SpeechSynthesis:给你的网页增添声音

    Web API SpeechSynthesis是一项强大的浏览器功能,它允许开发者将文本转换为语音,并通过浏览器播放出来。本文将深入探讨SpeechSynthesis的控制接口,包括其功能、用法和一个完整的JavaScript示例。 参考资料:SpeechSynthesis - Web API 接口参考 | MDN (mozilla.org) 文本语音互换 | 一个覆盖广

    2024年02月19日
    浏览(38)
  • PLSQL启动报错:Initialization error

    计算机重新安装了VS2022后, 启动plsql,报错,提示初始化失败。 我安装的是 client 12.2 ,在官网中发现其需要 Microsoft Visual Studio 2013 Redistributable,而vs2022升级后,导致这个工具包丢失 解决办法: 下载 Microsoft Visual Studio 2013 Redistributable 后,安装上即可。(需要把高版本的先卸

    2024年02月16日
    浏览(52)
  • 电脑怎么设置开机密码?简单几步给你的电脑“上锁”

    在我们日常生活中,最常见的就是开机密码了,而电脑作为我们使用频率最高也是最复杂的设备,其安全性也是非常重要的, 那么电脑怎么设置开机密码?那么今天我们就来说一说开机密码的设置方法! 为了更安全,赶快来给你的电脑“上锁”吧! 操作环境: 演示机型:

    2024年02月15日
    浏览(54)
  • MyBatis-Plus 可视化代码生成器来啦,让你的开发效率大大提速!!

    在基于Mybatis的开发模式中,很多开发者还会选择Mybatis-Plus来辅助功能开发,以此提高开发的效率。虽然Mybatis也有代码生成的工具,但Mybatis-Plus由于在Mybatis基础上做了一些调整,因此,常规的生成工具生成的代码还有一些不太符合预期。而且对于多数据库的支持不是很好。

    2024年02月05日
    浏览(61)
  • DeepSpeed Chat: 一键式RLHF训练,让你的类ChatGPT千亿大模型提速省钱15倍

    近日来,ChatGPT及类似模型引发了人工智能(AI)领域的一场风潮。 这场风潮对数字世界产生了革命性影响。ChatGPT类模型具有惊人的泛用性,能够执行归纳、编程、翻译等任务,其结果与人类专家相当甚至更优。为了使ChatGPT等模型的训练和部署更轻松,AI 开源社区进行了各种

    2023年04月19日
    浏览(52)
  • 【rust/egui】(八)使用panels给你的应用划分功能区块

    rust新手,egui没啥找到啥教程,这里自己记录下学习过程 环境:windows11 22H2 rust版本:rustc 1.71.1 egui版本:0.22.0 eframe版本:0.22.0 上一篇:这里 panel 是ui上的一块区域,比如我们打开CSDN的markdown编辑器,它大致上可以划分成四(五)块 (当然实际实现上这四块区域可能不是并列的

    2024年02月09日
    浏览(41)
  • 给你的青春做个毕业册,用技术定格最美好的回忆

    🎈 毕业纪念册 山水有来路,早晚复相逢, 毕业 总是充满了离别和感恩。 不要因离别而伤感,告别才能再见。无论暂别或就别,朋友终会再相见。 青春总是充满了 不舍和留念 ,那我们就 将生活记录成册 ,待再次相逢,让我们 看照片再忆青春 吧。 当然技术人的毕业有技

    2024年02月06日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包