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)
为什么它不使用类名?
这是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)
| 归档时间: |
|
| 查看次数: |
13189 次 |
| 最近记录: |