私たちは、一連の責任の原則を実装するコードベースのハンドラクラスの階層を持っています。抽象Spring Beanをコンストラクタ-Argとして使用する
public abstract class AbstractHandler {
public AbstractHandler(final AbstractHandler next, final PropertyName propertyName) {
this.next = next;
this.propertyName = propertyName;
}
...
public class OneConcreteChildHandler extends AbstractHandler {
public OneConcreteChildHandler(final AbstractHandler next) {
super(next, PropertyName.OneConcreteChild);
}
...
は現在、新たに実装されたサービスへの具体的な子クラスのいずれかのインスタンスを注入する必要がありますあり、抽象親クラスがあり、それはいくつかの子クラスによって拡張され、また、そのコンストラクタで抽象を受信しますこれをXMLで構成する必要があります。私たちは、抽象親クラスの抽象Beanを構成することができますが、これがその後、コンストラクタ-argをコンクリートの子豆
<bean id="abstractHandler" abstract="true" class="...AbstractHandler" />
<bean id="oneConcreteChildHandler" class="...OneConcreteChildHandler" parent="abstractHandler">
<constructor-arg ref="abstractHandler"/> //"abstract bean can not be used here"
</bean>
<bean id="someService" class="...SomeService">
<constructor-arg ref="oneConcreteChildHandler"/>
...
ためには、これを克服するためにどのような方法がありますとして使用することが許可されていないようですか?ハンドラクラス階層はレガシーコードであり、この時点でソースを変更することはできません。
ありがとうございます。具体的な子クラスの中には、実際にはCoRチェーンを閉じる目的で既存のTailChildHandlerクラスがあり(そのコンストラクタにはsuper(null、null)が含まれています)、あなたのコンフィグレーションでtwoConcreteChildHandlerと同じ方法でそれを利用できます例。これにより問題が解決されます。 – hammerfest