gpt4 book ai didi

java - Spring XML 配置中的工厂方法 bean 继承

转载 作者:行者123 更新时间:2023-12-01 08:51:34 26 4
gpt4 key购买 nike

我读到,基于 XML 的 Spring 配置 bean 可以继承工厂方法。
我尝试实现它:

Controller 接口(interface):

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";
}
}

其他 Controller 实现:

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如下:

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

试试这个可能会起作用。

关于java - Spring XML 配置中的工厂方法 bean 继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42367064/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com