我們在我們的代碼庫中有一系列處理程序類,它們實現了一種責任鏈原則。有一個抽象父類,它是由幾個子類,這也收到了抽象在其構造擴展使用抽象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,但是這一次則似乎並沒有被允許使用作爲構造精氨酸的具體子bean
<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鏈(它的構造函數包含super(null,null))的現有的TailChildHandler類,我們可以在配置中使用它,方法與您的twoConcreteChildHandler相同例。這解決了這個問題。 – hammerfest