1

私はこのような構成を持っています

<bean id="outer" class="someclass" scope="singleton">
     <property name="p">
         <bean class="otherclass"/>
     </property>
</bean>

インターフェイスをotherclass実装します。ApplicationListenerしかし、これにより次のエラーが発生します。

内部 Bean ' name ' はインターフェースを実装していますが、シングルトン スコープがないため、それApplicationListenerを含むことによってイベント マルチキャストに到達できません。ApplicationContextトップレベルのリスナー Bean のみが非シングルトン スコープになることが許可されます。

Spring ドキュメントの他の場所で見つけることができる限り、外側の Bean がシングルトンの場合、内側の Bean はシングルトンと見なされます。

以前は機能していましたが、何が変わったのかわかりません。内部ビーンに scope="singleton" と id を指定してみましたが、何も変わりませんでした。

内部ビーンが受信できないのはなぜApplicationEventsですか?

4

2 に答える 2

1

Spring ドキュメントの他の場所で見つけることができる限り、外側の Bean がシングルトンの場合、内側の Bean はシングルトンと見なされます。

内部 Bean は常にプロトタイプスコープ ( ref ) ですが、構成内の複数の場所からそれらを参照する方法がないという理由だけで、シングルトン Bean 内で使用される場合、インスタンス化されるのは 1 回だけです。

Bean にイベントを受信させたい場合otherclassは、それ自体をトップレベルのシングルトン 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>
于 2013-10-02T10:18:52.677 に答える