우리는 일련의 책임 원리를 구현하는 코드베이스에서 핸들러 클래스의 계층 구조를 가지고있다. 이 추상 상위 클래스이며, 그것은 또한 자신의 생성자에서 추상를받을 여러 자식 클래스에 의해 확장 우리는 지금 새롭게 구현 서비스에 구체적인 하위 클래스 중 하나의 인스턴스를 주입해야추상 Spring bean을 생성자 -argle로 사용한다.
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 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"/>
...
에 대한이를 극복하기 위해 어떤 방법이 있나요로 사용하도록 허용하지 않는 것? 핸들러 클래스 계층 구조는 레거시 코드이며이 시점에서 소스를 수정할 수 없습니다.
감사합니다. 우리는 방금 구체적인 자식 클래스들 사이에 실제로 CoC 체인을 닫는 목적을위한 기존의 TailChildHandler 클래스가 있음을 알아 냈습니다. (생성자에는 super (null, null)이 포함되어 있습니다.) 당신의 twoConcreteChildHandler와 같은 방식으로 설정에서 활용할 수 있습니다. 예. 이렇게하면 문제가 해결됩니다. – hammerfest