Spring懒加载妙用

15 篇文章 1 订阅

开启 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);
        }
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值