栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring懒加载妙用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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;


@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);
        }
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/282181.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号