Java 自动连接子类,但使用父类作为引用

Java 自动连接子类,但使用父类作为引用,java,spring,Java,Spring,假设我有下面的类层次结构: //不是一个组件 公共类父类{ } //见更新;这驻留在另一个应用程序上下文中 @组成部分 公共类子级扩展父级{ } 我想使用构造函数注入自动连接子bean @组件 公开课考试{ 私人最终父母; 公共测试(@限定符(“子”)父级){ this.parent=parent; } } 但是Spring不允许我这样做,我抛出了一个异常,说: 原因:org.springframework.beans.factory.NoSuchBeanDefinitionExceptio

假设我有下面的类层次结构:

//不是一个组件
公共类父类{
}
//见更新;这驻留在另一个应用程序上下文中
@组成部分
公共类子级扩展父级{
}
我想使用构造函数注入自动连接
bean

@组件
公开课考试{
私人最终父母;
公共测试(@限定符(“子”)父级){
this.parent=parent;
}
}
但是Spring不允许我这样做,我抛出了一个异常,说:

原因:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有可用的“com.foo.Parent”类型的合格bean:至少需要1个符合autowire候选条件的bean。依赖项注释:{@org.springframework.beans.factory.annotation.Qualifier(value=child)}

有没有办法让这一切顺利进行

使现代化 好的,首先,你不可能找到这个问题的答案,因为我犯了一个错误,在提出问题之前没有正确地分析情况

因此,在我的例子中,发生的是“子”位于不同的应用程序上下文中,而该上下文恰好是主应用程序上下文中的一个bean。因为这个原因,本来是标准的春季练习对我来说是不起作用的


我将发布我的答案作为这个更新场景的解决方案。

我认为当您尝试从任何外部库自动连接某个类时,您有点像是在模仿这种情况。您必须通过xml或java配置获取bean。我认为这应该是可行的,你们应该从孩子身上移除这个组件

但无论如何,这样做应该有很大的理由。简单的弹簧接线更简洁和传统

package com.bssys.ufap.report.springconfig;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyConfig {
  @Bean
  public Parent getChild() {
    return new Child();
  }
}

因此,解决方案只需从其他应用程序上下文中查找bean,如下所示:

@组件
公开课考试{
私人最终父母;
公共测试(应用上下文应用上下文){
this.parent=applicationContext.getBean(“另一个上下文”,applicationContext.class).getBean(“子”,parent.class);
}
}

我想说这是正常的。但是,我不使用通过
@component
进行的组件扫描。当您删除
@限定符时如何?如果不向父级添加@component,您将获得什么好处?幕后,spring希望所有依赖bean都准备好运行。由于child扩展了parent,所以必须对它进行注释,才能断言spring来创建父bean,可以是注释,也可以是不注释any@ParthibanManickam我也这么想。尝试用
@Component
注释父对象,我不会说注释父对象和子对象是一个好的解决方案。我希望当一切都按预期运行时,会出现两个bean,导致相应的错误。无法使用Spring5.1.3进行复制。将您的代码原样添加到我拥有的一个Spring项目中,在
Test
构造函数中使用print语句,并且打印时没有错误。你确定你的
Child
类是通过组件扫描得到的吗?是的,我知道这一点,但在我的例子中Child已经是一个bean,我不想改变它。