Spring Boot @Lazy 教程展示了如何使用 Spring @Lazy 注解懒惰地初始化 bean。
Spring 是用于创建企业应用的流行 Java 应用框架。 Spring Boot 是 Spring 框架的演进,可帮助您轻松创建独立的,生产级的基于 Spring 的应用。
@Lazy
@Lazy
注解指示是否要延迟初始化 bean。 它可以用于@Component
和@Bean
定义。 @Lazy
bean 不会被初始化,直到被另一个 bean 引用或从BeanFactory
中显式检索。 不使用@Lazy
注解的 Bean 会被初始化。
Spring Boot @Lazy
示例
在下面的示例中,我们创建延迟懒惰地初始化的 bean。 它说明了两种类型的 bean 之间的区别。 该应用是一个简单的 Spring Boot Web 应用,可在嵌入式 Tomcat 服务器上运行。 我们使用 Freemarker 模板引擎。
这是项目结构。
pom.xml
Spring Boot 启动器是一组方便的依赖项描述符,可以极大地简化 Maven 配置。 spring-boot-starter-parent
具有 Spring Boot 应用的一些常用配置。 spring-boot-starter-freemarker
是使用 Freemarker 视图构建 MVC Web 应用的入门工具。
在spring-boot-maven-plugin
提供了 Maven 的春季启动支持,使我们能够打包可执行的 JAR 或 WAR 档案。 它的spring-boot:run
目标运行春季启动应用。
application.properties
在application.properties
文件中,我们编写了 Spring Boot 应用的各种配置设置。 完成这些设置后,我们可以通过localhost:8086/myapp/
访问该应用。
MyBean.java
这是MyBean
。 急切地初始化该 bean,即在 Spring 框架开始时。
MyLazyBean.java
MyLazyBean
包含@Lazy
注解。 第一次请求时,它会延迟地初始化。 从控制器请求。
StartUpBean.java
StartUpBean
实现一个应用侦听器; 当应用准备就绪时,它将记录一条消息。
MyController.java
这是一个控制器类。 它创建两个 bean 并接收它们的消息。 消息显示在 Freemarker 模板中。
我们注入BeanFactory
。 工厂用于访问 Spring bean。
此时,MyLazyBean
被初始化。
我们从工厂获得了MyBean
; MyBean
在 Spring 的启动时初始化。
showMessages.ftl
Freemarker 模板显示来自两个 bean 的消息。
index.html
index.html
中有一个链接,用于从 Bean 获取消息。
Application.java
Application
设置 Spring Boot 应用。 @SpringBootApplication
启用自动配置和组件扫描。
应用运行后,我们可以导航到localhost:8086/myapp/
。
当 Spring 启动时,我们可以看到这些日志消息。 请注意,MyBean
在启动时已初始化。
调用控制器时,将初始化MyLazyBean
。
在本教程中,我们展示了如何使用 Spring @Lazy
注解。