Spring全局懒加载的优劣及使用方法详解

 更新时间:2023年10月12日 10:07:36   作者:项哥  
这篇文章主要介绍了Spring全局懒加载的优劣及使用方法详解,Spring 懒加载是一种延迟加载的机制,它允许在需要时才创建和初始化对象,而不是在应用程序启动时就立即加载所有对象,通过懒加载,可以提高应用程序的性能和资源利用率,需要的朋友可以参考下

开启 Spring 全局 bean 懒加载的好处

  • 可以加快启动速度,当服务依赖很多的时候,增速非常明显。
  • 服务启动时不用考虑依赖,不需要满足所有的依赖就可以启动服务
  • 建议 在 test, qa, dev 等环境酌情开启,在自己本机调试测试时可以只测试部分功能,只需要保证需要测试的功能依赖满足即可
  • 生产环境一般不建议开启
  • 本机单元测试的时候使用全局懒加载和 @mock 结合

开启 Spring 全局 bean 懒加载的坏处

  • 屏蔽了启动时对 bean 的依赖检查,当 bean 不满足生成条件的时候需要等待实际调用才会暴露出来
  • bean 在第一次使用的时候才初始化,影响第一次访问的速度

Spring 懒加载注意事项

  • 当开启全局懒加载以后,某个 bean 不希望懒加载时可以加上 @Lazy(false) 注解
  • quarz 定时任务不能延迟加载,如果延迟加载的话就可能导致定时任务失效
  • sdk 静态方法调用会因为懒加载导致依赖的 bean 无法加载。例如
@Component
public class Client {
   private static ServiceA service;
   public class Client(ServiceA service) {
      Client.service = service
   }
   // 当调用 Client.hello()方法时会报错
   public static String hello() {
      return service.hello();
   }
}

开启 Spring 全局 bean 懒加载的方式

方法1.Spring boot 2.2 版本以上,可以设置 spring.main.lazy-initialization=true

方法2. 增加一个配置类 LazyInitBeanFactoryPostProcessor

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
/**
 * 懒加载加快启动速度
 * @author liufang
 */
@Profile(value = {"qa", "dev"})
@Configuration
public class LazyInitBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        for (String beanName : beanFactory.getBeanDefinitionNames()) {
            beanFactory.getBeanDefinition(beanName).setLazyInit(true);
        }
    }
}

到此这篇关于Spring全局懒加载的优劣及使用方法详解的文章就介绍到这了,更多相关Spring全局懒加载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中channel用法总结

    Java中channel用法总结

    这篇文章主要介绍了Java中channel用法,较为详细的总结了channel的定义、类型及使用技巧,需要的朋友可以参考下
    2015-06-06
  • 一种类似JAVA线程池的C++线程池实现方法

    一种类似JAVA线程池的C++线程池实现方法

    线程池(thread pool)是一种线程使用模式。线程过多或者频繁创建和销毁线程会带来调度开销,进而影响缓存局部性和整体性能。这篇文章主要介绍了一种类似JAVA线程池的C++线程池实现方法,需要的朋友可以参考下
    2019-07-07
  • 深入解析Java中的InterruptedException从异常处理到最佳实践方案

    深入解析Java中的InterruptedException从异常处理到最佳实践方案

    在Java多线程编程中,InterruptedException 是一个常见但又容易被忽视的异常,本文将通过一个实际的日志案例,分析 InterruptedException 的产生原因、影响,并提供合理的解决方案和最佳实践,感兴趣的朋友一起看看吧
    2025-06-06
  • MyBatis的<foreach>以及java代码的批处理方式

    MyBatis的<foreach>以及java代码的批处理方式

    这篇文章主要介绍了MyBatis的<foreach>以及java代码的批处理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • 详解spring多线程与定时任务

    详解spring多线程与定时任务

    本篇文章主要介绍了spring多线程与定时任务,详细的介绍了spring多线程任务和spring定时任务,有兴趣的可以了解一下。
    2017-04-04
  • java中synchronized锁的升级过程

    java中synchronized锁的升级过程

    这篇文章主要介绍了java中synchronized锁的升级过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Nexus存储库管理器搭建-Maven私服详解

    Nexus存储库管理器搭建-Maven私服详解

    这篇文章主要介绍了Nexus存储库管理器搭建-Maven私服,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06
  • Java Optional的判空操作详解

    Java Optional的判空操作详解

    JAVA在1.8版本推出Optional,官方文档将其描述为可能包含或不包含非空值的容器对象,目前Optional用于避免程序出现异常NullPointerException,感兴趣的可以了解一下
    2022-09-09
  • SpringBoot中GlobalExceptionHandler异常处理机制详细说明

    SpringBoot中GlobalExceptionHandler异常处理机制详细说明

    Spring Boot的GlobalExceptionHandler是一个全局异常处理器,用于捕获和处理应用程序中发生的所有异常,这篇文章主要给大家介绍了关于Java中GlobalExceptionHandler异常处理机制的相关资料,需要的朋友可以参考下
    2024-03-03
  • Java 提取照片的EXIF信息批量重命名

    Java 提取照片的EXIF信息批量重命名

    这篇文章主要介绍了Java 提取照片的EXIF信息批量重命名的方法,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下
    2021-04-04

最新评论