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。并且在第三方cpring配置XML中保持factory-bean
的bean id与原型bean相同。
这种方法有用吗?
答案 0 :(得分:0)
并且还保持factory-bean的bean id与原型相同 bean在第三方cpring配置XML。
我不认为这会奏效。如果您有两个具有相同名称的bean(您定义的bean以及可能在第三方配置中定义的那个),您将获得例外。
但是,我认为您可以使用BeanDefinitionRegistryPostProcessor到remove the prototype scoped bean并将其替换为您自己设计的bean。