【问题标题】:Spring - Using factory-bean types with lookup-methodSpring - 使用带有查找方法的工厂 bean 类型
【发布时间】:2014-08-08 13:20:01
【问题描述】:

Okie 有一些第三方代码在 Spring 3.1.4 上运行,我无法更改。代码还使用lookup-method 在运行时动态注入类型。这种类型是原型范围。所有都是基于lookup-method 的服务对象创建的标准Spring 用法。 问题是在 3.1.4 上,DefaultSingletonBeanRegistry 上有很多阻塞,因为 getSingleton 方法中存在同步块。线程转储显示,当需要基于lookup-method 的注入时,执行路径会到达那里,并且会卡在那里直到他们有时间运行。

我想知道是否可以使用工厂 bean 来创建这些原型 bean,而不是将它们定义为原型 bean 本身。在工厂 bean 的工厂方法中,我将使用基于 new constructor_call() 的方法来实例化值 bean。并且还要保持factory-bean的bean id与第三方cpring配置XML中的prototype bean一致。

这种方法行得通吗?

【问题讨论】:

    标签: java spring dependency-injection


    【解决方案1】:

    并且还要保持 factory-bean 的 bean id 与原型相同 第三方cpring配置XML中的bean。

    我认为这行不通。如果您有两个具有相同名称的 bean(您定义的一个加上可能在第 3 方的配置中定义的一个),您将得到一个异常。

    但是,我认为您可以使用 BeanDefinitionRegistryPostProcessorremove the prototype scoped bean 并将其替换为您自己设计的 bean。

    【讨论】:

    • 这对 John 有效,但 2 个具有相同 id 的 bean 并不是一个优雅的解决方案。您不会得到任何异常,但 ht bean 会被静默覆盖。当同一个 xml 文件中的 2 个 bean 具有相同的 id 时,您会收到异常或错误。我想就是这样。
    猜你喜欢
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    • 2017-02-08
    • 1970-01-01
    相关资源
    最近更新 更多