创建 Java Bean 继承结构时出现问题

Problems creating a Java Bean inheritance structure

我正在尝试使用 Java Beans 创建我认为是简单的继承结构(我以前从未使用过它们)。我得到的代码的基数 class 定义为

public class CreateDialogFactory {
    priavte static beanId;

    protected CreateDialogFactory() { }
    protected CreateDialogFactory(String beanId) { this.beanId = beanId; }

    public static CreateScenarioDialog getInstace() {
        return SpringHelper.getInstance(beanId, CreateScenarioDialogFactory.class);

    }
}

从这个 class 继承的是两个 class 定义的:

@Component(ACreateScenarioDialogFactory.BEAN_ID)
public class ACreateScenarioDialogFactory extends CreateDialogFactory {

    private static String BEAN_ID = "create-a-scenario";

    protected ACreateScenarioDialogFactory() {
        super(BEAN_ID);
    }
}

@Component(BCreateScenarioDialogFactory.BEAN_ID)
public class BCreateScenarioDialogFactory extends CreateDialogFactory {

    private static String BEAN_ID = "create-b-scenario";

    protected BCreateScenarioDialogFactory() {
        super(BEAN_ID);
    }
}

我的 xml 规范非常简单 -

我的问题是,当我编译时我得到 No unique bean of type [a.b.CreateDialogFactory] is defined: expected single matching bean but found 2: [create-a-scenario, create-b-scenario]

即使我注释掉 xml 规范中的 bean 定义。

Spring 中的控制反转旨在与接口一起使用。在您的代码中,层次结构的基础 class 在生成 bean 时被视为类型,因此 SpringHelper.getInstance(beanId, CreateScenarioDialogFactory.class) 无法在 ACreateScenarioDialogFactoryBCreateScenarioDialogFactory 之间进行选择,因为它们是相同的类型。