【问题标题】:lazily initialize a bean which is referenced by another lazy-init bean惰性初始化一个被另一个惰性初始化 bean 引用的 bean
【发布时间】:2012-11-05 14:43:49
【问题描述】:

我有一个延迟初始化的 bean,并且有几个参数和属性要设置。

  <bean id="abc" class="a.b.c.abc" lazy-init="true">
        <constructor-arg ref="qwert" />
        <property name="aImplementations">
            <list>
                <ref bean="newBean" />
            </list>
        </property>
    </bean>

newBean 被定义为&lt;bean id="newBean" class="a.b.c.newBean" lazy-init="true" init-method="init" /&gt;

但是惰性 bean 被初始化并调用了 init() 方法。

如果我删除 bean 'abc' 并只保留 newBean,则不会调用 newBean 类的 init() 方法。

可能是什么原因?我在 Google 上搜索过,但没有任何帮助。

【问题讨论】:

  • 从您的 XML 示例看来,abcnot 延迟初始化的,这将导致观察到的问题。你的例子有错误吗?
  • 那么,abc 是否被任何其他非惰性 bean 引用?
  • 不,看起来不像。我只是在工作区中寻找并没有找到任何东西。
  • 你可以在abc的构造函数中放置断点。这并不容易,但是通过一些练习,您会发现 Spring 加载特定 bean 的原因。

标签: java spring lazy-initialization


【解决方案1】:

只有在没有从任何其他 bean 引用或从另一个延迟初始化的 bean 引用时,才会对 bean 进行延迟初始化。你的 bean 'abc' 是非惰性的,在构造这个 bean 时,它必须将 newBean 插入 abc。

【讨论】:

  • 试着让你的 'abc' bean 变得懒惰,然后你会看到你的 newbean 的 init 不会在应用程序启动时被调用
  • 对不起,这是延迟初始化的问题。我只是想在这里添加。添加! :)
  • 然后在一些非懒惰的bean中检查它的引用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-21
  • 1970-01-01
  • 2020-12-01
  • 1970-01-01
  • 2013-01-06
  • 2012-09-14
  • 1970-01-01
相关资源
最近更新 更多