【问题标题】:Class Constructor in lazy-init惰性初始化中的类构造函数
【发布时间】:2018-03-30 12:10:48
【问题描述】:

我正在使用lazy-init="true" 创建一个bean,但我不希望调用类的构造函数。但不知何故,lazy-init 也被调用了。

<bean id="abc" class="a.b.c.UtilClass" lazy-init="true" />

谁能帮我停止在启动时调用类构造函数?我希望在需要时调用它。

【问题讨论】:

  • 你不能创建一个bean而不运行它的构造函数,这是没有意义的(创建一个bean ==实例化它的类的一个新实例,其中包括执行其构造函数)。但是,您可以使用单例或任何范围的 bean 来一遍又一遍地重用同一个 bean 实例。

标签: java spring


【解决方案1】:

这通常意味着对您的 bean 的依赖项也在被实例化。经典的依赖链是一个必须加载的单例(例如 Spring MVC 控制器),它引用一个服务 bean,然后引用 DAO bean,因此它们都必须被实例化。

如果@Lazylazy-init bean 从原型或会话 bean 中引用,或者从在运行时通过 ObjectFactory 创建的 bean 中引用,它们会更有用。

如果对依赖链如何到达您的 bean 有疑问,请尝试在构造函数中放置断点。在 BeanFactory 类的调用堆栈中通常有一些 resolveDependency() 方法(例如 DefaultListableBeanFactory)。看看那里的beanName 变量值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 2021-11-21
    • 2013-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多