Java 测试类中的接口getBean

Java 测试类中的接口getBean,java,spring,junit,Java,Spring,Junit,我有一个界面 @Component("a") @Scope("prototype") Public interface A{ ..... } 以及实现接口a的b类 public class B implement A{ ... } 和Junit测试类 public class PartyTest { private static BeanFactory factory = null; @BeforeClass public static void loadSpr

我有一个界面

@Component("a")
@Scope("prototype")
Public interface A{
.....
}
以及实现接口a的b类

public class B implement A{
  ...
}
和Junit测试类

public class PartyTest {
    private static BeanFactory factory = null;

    @BeforeClass
    public static void loadSpring() {
        ClassPathXmlApplicationContext applicationContext = 
            new ClassPathXmlApplicationContext(new String[]{"/spring/mainContext.xml"});
        factory = (BeanFactory) applicationContext;
    } 

    @Test
    public void personSaveTest() {
        A a = (A) factory.getBean("a");
    }
}
它抛出

org.springframework.beans.factory.nosuchbeansdefinitionexception:未定义名为“a”的bean


我的问题是,为什么我不能加载接口?如果我在类
b
的顶部使用
@Component(“b”)
,它可以加载类
b
,但它不能加载
接口A

Spring需要一个具体的“东西”来创建bean。所以
@组件
放错了位置(应该在
B
)。
@Scope
也是如此,它的目标是未来的bean(所以是具体的东西)。

Spring需要一个具体的“东西”来创建bean。所以
@组件
放错了位置(应该在
B
)。这同样适用于面向未来bean的
@Scope

Spring托管组件是某些东西的“真实实例”,因此它们必须始终是具体实现的实例(必须是具体类)。不能创建接口或抽象类的实例


请注意,这与类型无关(这可能会让您感到困惑):当然,此类实例属于从具体类开始的类型层次结构中的任何类型。在您的示例中,B的实例类型为B和A。

Spring托管组件是某个东西的“真实实例”,因此它们必须始终是具体实现的实例(必须是具体类)。不能创建接口或抽象类的实例


请注意,这与类型无关(这可能会让您感到困惑):当然,此类实例属于从具体类开始的类型层次结构中的任何类型。在您的示例中,B的一个实例的类型是B和A。

post-spring/mainContext.xmlhere@Ruchira组件是通过注释而不是通过configuration.post-spring/mainContext.xml创建的here@Ruchira组件是通过注释而不是配置创建的。我想加载接口并使用@qulifire来区分不同的实现。我应该怎么做?我想加载接口并使用@qulifire来区分不同的实现。我该怎么办?如果我把@Component放在B类上并把它移到A接口上,我就不能加载接口,只能加载Bean如果我把@Component放在B类上并把它移到A接口上,我就不能加载接口,只能加载Bean