spring - 使用 @Lazy 时创建 Bean 和初始化 Bean 的区别
问题描述
Spring IOC 在启动时创建并初始化 bean。bean的创建和初始化有什么区别?
在使用@Lazy 时,据说@Lazy 注解的bean 会被延迟实例化。这是否意味着,将在 ApplicationContext 启动时创建 bean [就像其他未使用 @Lazy 注释的 bean 一样],并且仅在首次引用时进行初始化?
解决方案
@懒惰的
指示是否要延迟初始化 bean。可用于任何直接或间接使用@Component 注释的类或使用@Bean 注释的方法。
如果 @Component 或 @Bean 定义上不存在此注解,则会发生急切初始化。如果存在并设置为 true,则 @Bean 或 @Component 在被另一个 bean 引用或从封闭的 BeanFactory 显式检索之前不会被初始化。如果存在并设置为 false,则 bean 将在启动时由执行单例预初始化的 bean 工厂实例化。
如果 @Configuration 类上存在 Lazy,则表明该 @Configuration 中的所有 @Bean 方法都应该被延迟初始化。如果 @Lazy 在 @Lazy 注释的 @Configuration 类中的 @Bean 方法上存在且为 false,则表示覆盖了“默认惰性”行为并且应该急切地初始化 bean。
除了用于组件初始化之外,此注解还可以放置在标记为 Autowired 或 Inject 的注入点上:在这种情况下,它会导致为所有受影响的依赖项创建延迟解析代理,作为使用 ObjectFactory 的替代方法或提供者。
推荐阅读
- javascript - 如何在嵌套对象数组中找到索引?
- rust - 在 rust 中的两个异步函数之间进行选择的变量 - 不兼容的 arm 类型
- python - Python - 多行到唯一行和转置列
- django - Django DetailView:将我切换到其他用户
- google-sheets - 如何在Google表格中对一个范围内的公式求和
- php - 在php中将多个文本字段写入现有的pdf文档
- javascript - TypeError:无法在回调中读取未定义的属性(读取“dataResponse”)
- azure - 从 dockerfile 构建 Azure 机器学习环境 (tensorflow) 失败
- ios - 核心数据导入:将数据合并到视图上下文时如何提高性能?
- javascript - 返回一个数组,其中包含所有 2 的幂的索引