当前位置: 首页 > 知识库问答 >
问题:

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

隗高旻
2023-03-14

我读到,在基于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";
    }
}
<!--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>

共有1个答案

酆乐湛
2023-03-14

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

试试这个也许能行。

 类似资料:
  • 我是新泉。在Bean标记中,我发现了factory-method和factory-method和factory-bean之间有什么区别? 我正在使用factory-method调用我的getInstance静态方法来创建singleton对象。 工厂豆是用来做什么的? 对于给定的答复,我所理解的是 Factory-method用于调用静态方法在同一个bean类中创建对象。 Factory-bean

  • 代码直戳: https://github.com/faif/python-patterns 创建型模式 工厂方法 实例 -> 类 -> 类工厂 抽象工厂 简单来说就是把一些具有相同方法的类再进行封装,抽象共同的方法以供调用.是工厂方法的进阶版本. 实例 -> 类 -> 类工厂 -> 抽象工厂 惰性初始化 Lazy evaluation 这个Python里可以使用@property实现,就是当调用的

  • 工厂方法,就是通过一个"虚拟"构造方法,供调用者获取特定的实例. 至于返回的是什么实例, 得看环境和传入的参数,及 方法内的业务逻辑了. 例如, 希望在生产环境用Product目录下的配置文件,开发环境用dev目录下的配置文件 使用Iocbean的factory 通过IocBean注解内的factory参数,可以自定义工厂类及工厂method factory参数的规则是, 以井号分隔,井号之前的是

  • 工程配置方法 本章节叙述了在一个项目工程需要用到的组件以及器配置,包括了 Tomcat安装与配置、SpringMVC 的配置、Dubbo 的安装配置以及其运行过程。 这章节中 将带领大家一步步从零 搭建一个 web 工程 并使其 在电脑上run起来,之后将其改写成SpringMVC 的工程,成功之后 我们再次将SpringMVC 通过 Dubbo 将项目变为一个服务消费者和服务提供者,并向大家展示

  • Okie正在Spring 3.1.4上运行一些第三方代码,我无法更改。代码还使用在运行时动态注入类型。这种类型属于原型范围。所有这些都是基于服务对象创建的

  • 您可以用Spring以各种方式创建-对象。 一种方法是将-注释添加到-声明中,如下所示: 它将从-类创建一个bean,然后使用其setter用配置文件中的值填充其成员。 您也可以直接在-Object上进行注释,如下所示: 通过将放置到任何加载的配置来创建它。 还可以使用 但是如何结合第一个@Bean方法创建不可变的ConfigurationProperties呢? 我尝试过这样的东西: 它告诉我,