我有这样的配置
<bean id="outer" class="someclass" scope="singleton">
<property name="p">
<bean class="otherclass"/>
</property>
</bean>
otherclass
实现了ApplicationListener
接口。但这给了我以下错误:
内部bean'名称'实现
ApplicationListener
接口但由于其包含ApplicationContext
而无法通过事件多播进行访问,因为它没有单例范围。只允许顶级侦听器bean为非单例范围。
据我在Spring文档的其他地方可以找到,当外部bean是单例时,内部bean被认为是单例。
我以前有过工作,但我不确定是什么改变了。我也尝试在内部bean上指定scope =“singleton”和id,但它没有改变任何东西。
为什么我的内豆不能接收ApplicationEvents
?
答案 0 :(得分:1)
据我在Spring文档的其他地方可以找到,当外部bean是单例时,内部bean被认为是单例。
内部bean总是 prototype 作用域(ref),但它们只在单例bean中使用时才被实例化,因为没有办法从更多内容中引用它们比配置中的一个地方。
如果您希望您的otherclass
bean接收事件,您必须将其自身设为顶级单例bean
<bean id="otherclass-bean" class="otherclass" scope="singleton"/>
<bean id="outer" class="someclass" scope="singleton">
<property name="p">
<ref local="otherclass-bean"/>
</property>
</bean>
答案 1 :(得分:0)
答案实际上是由一些不相关的代码引起的,这些代码覆盖了bean的名称。所以我的orignal场景应该独立运作。