簡體   English   中英

Spring XML配置中的工廠方法bean繼承

[英]Factory method bean inheritance in Spring XML configuration

我讀到,在基於XML的Spring配置中,bean可以繼承工廠方法。
我試圖實現它:

控制器接口:

public interface Controller {
    String method();
}

ControllerFactory類:

public class ControllerFactory {
    public Controller getController(String controllerName){
        switch(controllerName){
            case "OtherController":
                return new OtherController();
            case "SampleController":
                return new SampleController();
            default:
                throw new IllegalArgumentException("Wrong controller name.");
        }
    }
}

SampleController實現:

public class SampleController implements Controller {
    @Override
    public String method() {
        return "SampleController";
    }
}

OtherController實現:

public class OtherController implements Controller {
    @Override
    public String method() {
        return "OtherController";
    }
}

但是以下XML配置:

<!--factory method inheritance -->
<bean id="controllerFactory" class="factory.ControllerFactory"/>
<bean id="parentController" abstract="true" factory-bean="controllerFactory" factory-method="getController"/>
<bean id="otherController" parent="parentController">
    <constructor-arg index="0" value="OtherController"/>
</bean>

給出編譯時錯誤:

No matching constructor found in class 'Controller'

如何更改它以正確實現工廠方法bean繼承?

將工廠方法配置復制到子bean可以正常工作:

<bean id="otherController" parent="parentController" factory-bean="controllerFactory" factory-method="getController">
    <constructor-arg index="0" value="OtherController"/>
</bean>

與ID更改豆parentController如下:

<bean id="parentController" class="factory.ControllerFactory" factory-bean="controllerFactory" factory-method="getController"> <constructor-arg index="0" value="OtherController"/> </bean>

試試這個可能有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM