在这篇博客中,我们将探讨 Spring Boot 中的懒加载初始化概念,以及如何使用“@Lazy”注解及其给应用带来的好处。
懒初始化是什么?懒惰初始化是一种设计模式,将对象的创建推迟,直到真正需要时才创建。在Spring框架中,这意味着一个bean在首次被请求时才被实例化和初始化。这特别有助于缩短应用程序的启动时间,尤其是在有许多bean或某些bean创建成本较高的情况下。
“@Lazy” 注解
Spring 提供了 @Lazy 注解来实现懒加载。这个注解可以有多种使用方式:
1. 在定义 Bean 时使用@Lazy
要在 bean 上使用“@Lazy”注解,只需在 bean 方法上加上“@Lazy”注解。
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
@Configuration
public class 应用程序配置类 {
@Bean
@Lazy
public 测试Bean testBean() {
return new 测试Bean();
}
}
在这个例子中,只有在第一次请求时才会创建testBean。
2. 在配置类中使用@Lazy
:
你也可以在类级别上使用 @Lazy,以表明配置中所有的 bean 都应懒加载。
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Bean;
@Configuration
@Lazy
public class LazyConfig {
@Bean
public TestBean testBean() {
return new TestBean();
}
@Bean
public AnotherTestBean anotherTestBean() {
return new AnotherTestBean();
}
}
在此情况下,“testBean”和“anotherTestBean”将被延迟初始化。
3. 使用@Lazy
注解在依赖项上
你可以用“@Lazy”注解来实现懒加载依赖,这样可以延迟解析依赖。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
@Component
public class TestComponent {
private final TestBean testBean;
@Autowired
public TestComponent(@Lazy TestBean testBean) {
this.testBean = testBean;
}
// 可以在这里添加更多方法
}
这里,“testBean”仅在访问“TestComponent”时首次被访问时创建。
懒加载的好处有哪些- 提升启动速度:通过延迟 bean 的创建直到实际需要时,可以缩短应用程序的初始启动时间。
- 资源管理:惰性初始化能更高效地管理资源,因为它只会实例化实际使用的 bean。
- 避免循环依赖:惰性初始化可以通过延迟创建 bean 来避免循环依赖。
结尾
通过使用“@Lazy”注解,你可以控制何时实例化和初始化 bean 实例。但是,需要小心使用此功能,并注意它可能对应用程序性能的影响。
参考资料
https://www.baeldung.com/spring-lazy-annotation
懒加载注解(来自 Spring 框架 6.1.10 API 的声明):包:org.springframework.context.annotation,注解类型:LazyGithub : https://github.com/tharindu1998/lazy-annotation
栈学 🎓感谢你一直读到最后。临走前,再跟你说几句:
- 给作者点赞和关注一下!👏
- 关注我们 X | 领英(LinkedIn) | YouTube | Discord
- 浏览我们的其他平台: In Plain English | CoFeed | Differ
- 更多精彩内容请访问 Stackademic.com