0
我讀過,基於XML的Spring配置bean可以繼承工廠方法。
我試圖實現它:
控制器接口:Spring XML配置中的工廠方法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 id="otherController" parent="parentController" factory-bean="controllerFactory" factory-method="getController">
<constructor-arg index="0" value="OtherController"/>
</bean>
也傳遞構造函數。 – SachinSarawgi