Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.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 Spring:根据父实现选择bean实现_Java_Spring - Fatal编程技术网

Java Spring:根据父实现选择bean实现

Java Spring:根据父实现选择bean实现,java,spring,Java,Spring,我有一个抽象类和两个实现。让我们称他们为ParentAbstract,ParentA和ParentBParentAbstract具有类型为BeanAbstract:bean的属性。这个抽象类有两种实现:BeanA和BeanB 可以使用Spring,以便它将ParentA中的BeanA和ParentB中的BeanB注入 请注意,我不能将ParentA和ParentB用作SpringBean,因为它们是Wicket页面。Spring默认尝试按类型自动连接。当存在歧义时(例如这里的情况),您必须提供一

我有一个抽象类和两个实现。让我们称他们为
ParentAbstract
ParentA
ParentB
ParentAbstract
具有类型为
BeanAbstract:bean
的属性。这个抽象类有两种实现:
BeanA
BeanB

可以使用Spring,以便它将
ParentA
中的
BeanA
ParentB中的
BeanB
注入


请注意,我不能将
ParentA
ParentB
用作SpringBean,因为它们是Wicket页面。

Spring默认尝试按类型自动连接。当存在歧义时(例如这里的情况),您必须提供一个限定符。 推荐的方法是显式声明配置中的依赖项(
XML
@configuration
),或按名称自动连线

@Resource(name="beanA")

在您的
ParentAbstract
中添加一个抽象方法

abstract setBean(BeanAbstract bean);
然后在子类中,覆盖它们并注释:

@Override
@Autowired
@Qualifier("name") // or @Resource("name")
setBean(BeanAbstract bean) {
    this.bean=bean;
}

除非我错了,否则协方差只允许用于返回类型。好的,谢谢,这回答了我的问题。现在我要问一个问题:D@artbristol,请注意,
@限定符
不鼓励使用
@资源
。问题是,当我创建
父对象a
时,我希望
bean
的类型为
BeanA
,当我创建
父对象B
时,
bean
的类型应该是
BeanB
。我在应用程序中使用这两种实现。