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