【问题标题】:Spring default-lazy-init does not seems to work, i see Pre-instantiating of singletonsSpring default-lazy-init 似乎不起作用,我看到了单例的预实例化
【发布时间】:2014-03-02 19:27:40
【问题描述】:

我在 beans 标记内的 spring 上下文文件中定义 default-lazy-init="true" 但是当我启动 tomcat 时,我看到我的 beans 正在实例化。这是它在日志中显示的内容 -

org.springframework.beans.factory.support.DefaultListableBeanFactory (DefaultListableBeanFactory.java:555) - 在 org.springframework.beans.factory.support.DefaultListableBeanFactory@ac6fb1 中预实例化单例:定义 beans [dataSource,my other beans in应用.......

我错过了什么吗?

【问题讨论】:

  • 发布完整的堆栈跟踪或日志。发布您的上下文。

标签: java spring lazy-initialization


【解决方案1】:

即使一个 bean 被声明为惰性初始化,如果另一个 bean 依赖它,它仍然会被初始化。

我将从您的日志中假设有问题的 bean 是dataSource。我还将假设您还有其他依赖于 dataSource 的 bean(否则它不会很有用)。如果上下文初始化其他 bean 并发现,例如,它需要自动装配 dataSource bean,它必须首先初始化它。

如果你想要完全延迟初始化,你必须让某个对象图中的每个 bean 都被延迟初始化。

【讨论】:

  • 感谢您的回复,我有 100 多个其他 bean(控制器、服务、dao)同时被初始化。你能解释一下“让某个对象图中的每个 bean 都被延迟初始化”吗?
  • @amit 假设你的惰性初始化 bean 是 AAB 的注入依赖项。如果您从ApplicationContext 请求B,它将初始化B(如果还没有),并且由于依赖关系,还会初始化A
  • 我研究了相互依赖方面,但大多数都没有。它们是不同功能/模块的一部分。除此之外还有其他想法吗?
  • @Amit 除非你给我们一个例子(理想情况下它会很小且可重复),我们只能猜测。我最好的猜测是我上面所说的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多