【Spring】07 懒加载

1.定义

懒加载(Lazy Initialization)是Spring 框架中的一项强大的特性,它允许我们推迟 Bean 的初始化,直到它第一次被请求使用。这种方式对于提高应用程序的性能和降低资源消耗非常有益

在这里插入图片描述

2. 作用

在默认情况下,Spring 容器会在应用程序启动时初始化所有的 Bean。但是,在某些情况下,可能存在大量的Bean,而不是每个 Bean 都在应用启动时立即被使用的情况。这时懒加载就能发挥作用了!

懒加载的主要作用包括:

  • 减少启动时间

    只有在需要使用某个 Bean 时才进行初始化,可以显著减少应用程序的启动时间

  • 降低资源消耗

    如果某些 Bean 很少被使用,那么将它们设为懒加载可以减少系统资源的占用

3. 配置方式

在 Spring 中,配置 Bean 的懒加载非常简单。可以通过 XML 配置、Java 配置或使用注解来实现

1)XML配置

使用了 lazy-init="true" 配置的懒加载

<bean id="springDemo" class="org.example.cheney.SpringDemo" lazy-init="true">
    <!-- Bean的其他配置 -->
</bean>

2)Java配置
@Configuration
public class AppConfig {
   

    @Bean
    @Lazy
    public SpringDemo springDemo() {
   
        return new SpringDemo();
    }
}
3)注解方式
@Component
@Lazy
public class SpringDemo {
   
    // Bean的配置
}

4. 应用场景

懒加载通常适用于以下场景:

  • 大规模 Bean 集合

    当有大量 Bean 定义,但只有少数在应用启动时就被使用,可以使用懒加载减少启动时间

  • 资源密集型操作

    如果某个 Bean 的初始化过程非常耗时或资源密集,而且并非每次都会被用到,可以考虑懒加载

  • 条件化的 Bean 加载

    当 Bean 的加载依赖于某些条件,且这些条件在应用启动时无法确定,懒加载是一个不错的选择

5. 注意事项

在使用懒加载时,需要注意以下几点:

  • AOP 代理问题:

    如果懒加载的 Bean 使用了 AOP 代理,那么懒加载将被失效,Bean 将在应用启动时被初始化。这是因为 AOP 代理需要在 Bean 初始化时生成。

  • 单例模式:

    默认情况下,懒加载的 Bean 是单例的。如果需要每次都创建一个新的 Bean 实例,可考虑使用原型作用域。

  • 及时释放资源:

    尽管懒加载可以减少资源占用,但在 Bean 真正被使用前,仍然需要小心及时释放可能占用的资源,以避免不必要的开销。

总结

懒加载(Lazy Initialization)是 Spring 框架中一项有用的特性,可以显著提高应用程序的启动性能和减少资源消耗。通过简单的配置,我们可以根据实际需求决定哪些 Bean 需要立即初始化,哪些可以推迟到真正需要时再进行初始化。在大型应用或资源密集型操作中,懒加载是一个强大的工具,有助于优化系统性能。

相关推荐

  1. React

    2023-12-17 22:44:02       22 阅读
  2. 指定元素

    2023-12-17 22:44:02       21 阅读
  3. 路由

    2023-12-17 22:44:02       7 阅读
  4. MyBatis的延迟

    2023-12-17 22:44:02       45 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-17 22:44:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-17 22:44:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-17 22:44:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-17 22:44:02       20 阅读

热门阅读

  1. Linux计划任务

    2023-12-17 22:44:02       30 阅读
  2. Rust做一个图片服务器有多难?

    2023-12-17 22:44:02       33 阅读
  3. 什么是PHP的反射(Reflection)?

    2023-12-17 22:44:02       37 阅读
  4. 如何使用Composer安装第三方库?

    2023-12-17 22:44:02       44 阅读
  5. Linux常见面试题30题详细答案解析(三)

    2023-12-17 22:44:02       33 阅读
  6. CSU21级期末

    2023-12-17 22:44:02       35 阅读
  7. 发起POST请求时同时携带文件和自定义参数

    2023-12-17 22:44:02       36 阅读