Spring没有类型的独特bean

Tob*_*bia 8 spring code-injection javabeans

我在Spring中有两个服务组件有点麻烦.

我有这个组件:

@Component
public class SmartCardWrapper 
Run Code Online (Sandbox Code Playgroud)

还有这个:

@Component
public class DummySmartCardWrapper extends SmartCardWrapper
Run Code Online (Sandbox Code Playgroud)

该服务自动装配,但弹簧因此次尝试失败:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [com.cinebot.smartcard.SmartCardWrapper] is defined: expected single matching bean but found 2: [dummySmartCardWrapper, smartCardWrapper]
Run Code Online (Sandbox Code Playgroud)

为什么它不使用类名?

axt*_*avt 6

这是Spring最基本的概念之一 - 控制反转.

您不需要使用其实现类型声明您的依赖项(以避免与实现耦合).您可以使用接口或超类声明它们,并使Spring在上下文中找到正确的实现类.

换句话说,bean没有通过它们的实现类来区分,因为您可能希望更改bean的实现类而不更改依赖它的bean.如果要区分相同类型的不同bean,请改用逻辑bean名称:

@Autowired @Qualifier("smartCardWrapper")
private SmartCardWrapper smardCardWrapper;

@Autowired @Qualifier("dummySmartCardWrapper")
private SmartCardWrapper dummySmardCardWrapper;
Run Code Online (Sandbox Code Playgroud)