Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringXML配置中的工厂方法bean继承_Java_Xml_Spring_Inheritance_Javabeans - Fatal编程技术网

Java SpringXML配置中的工厂方法bean继承

Java SpringXML配置中的工厂方法bean继承,java,xml,spring,inheritance,javabeans,Java,Xml,Spring,Inheritance,Javabeans,我读到,在基于XML的Spring配置中,bean可以继承工厂方法。 我试图实现它: 控制器接口: public interface Controller { String method(); } ControllerFactory类: public class ControllerFactory { public Controller getController(String controllerName){ switch(controllerName){

我读到,在基于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";
    }
}
public class OtherController implements Controller {
    @Override
    public String method() {
        return "OtherController";
    }
}
其他控制器实现:

public class SampleController implements Controller {
    @Override
    public String method() {
        return "SampleController";
    }
}
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>
如何更改它以正确实现工厂方法bean继承

将工厂方法配置复制到子bean的工作方式与预期一致:

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

将id为的bean更改为parentController,如下所示:



试试这个,它可能会工作。

也传递构造函数参数。