gpt4 book ai didi

spring - 在 spring batch 框架中, 'lazy-init=true' 和 'scope=step' 有什么区别?

转载 作者:行者123 更新时间:2023-12-01 03:56:10 24 4
gpt4 key购买 nike

当我使用“scope=step”定义“MethodInvokingFactory”bean 时,出现无法确定 bean 类型的错误。当我将“scope=step”替换为“lazy-init=true”时,它工作正常。据我所知,除了一个区别外,两者都用于 bean 的后期绑定(bind)。这两种方式之间还有其他区别吗?另外,我的用法正确吗?

请让我知道您对此的看法。

最佳答案

从低层次的角度回答你的问题:

lazy-init="true" 意味着 bean 不会在创建上下文时实例化,而是在引用时创建,例如由另一个 bean 。我认为这很清楚,也来自@AravindA 评论。

Scoped bean 以不同的方式工作。当上下文被创建时,这个 bean 被包装到额外的代理对象中(默认情况下由 CGLIB 创建),它被传递给引用它的 bean(这个代理默认是单例的,例如共享的)。因此,每次在运行时在代理上调用该方法时,Spring 都会与调用相交,请求工厂返回 bean 的实例并调用该 bean 上的方法。工厂反过来可能会查找“真正的”bean 实例,例如在 HTTP 请求(“请求”范围)或 HTTP session (“ session ”范围)中和/或在必要时创建新实例。后期实例化允许使用“运行时”(范围)值初始化作用域 bean,例如来自 HTTP 请求/ session 的值在创建上下文时显然是未定义的。特别是“步骤”范围的 beans 绑定(bind)到本地线程(请记住,步骤是并行运行的以进行分区)。因此,当您在其上调用方法时,作用域 bean 将被取消引用。最后,可以通过在范围 bean 设置为另一个 bean 之后调用任何方法(例如在 setter 中)来轻松打破这种优雅的 Spring “意识形态”:)

关于spring - 在 spring batch 框架中, 'lazy-init=true' 和 'scope=step' 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8753967/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com