Man*_*Row 6 java inheritance spring javabeans autowired
为什么Spring在自动装配期间自动选择超类类型?
例如,如果我有
@Component
public class Foo {}
@Component
public class Bar extends Foo {}
Run Code Online (Sandbox Code Playgroud)
和某人自动装配
@Autowired
private Foo foo;
Run Code Online (Sandbox Code Playgroud)
为什么Spring总是选择超类型Foo?这不应该是一个" 模糊 "的映射(并导致Spring抛出错误)?
你在技术上不是有两个 Foo候选人吗?(例如,当从Foo中移除@Component时,会自动选择 Bar ...)
这可能是因为自动装配是通过名称而不是类型完成的.如果我使用xml设置我的bean,如下所示:
<bean id="foo1" class="Foo"/>
<bean id="foo2" class="Bar"/>
Run Code Online (Sandbox Code Playgroud)
并尝试按类型自动装配:
@Autowired private Foo aFoo;
Run Code Online (Sandbox Code Playgroud)
我明白了
org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [Foo]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3459 次 |
| 最近记录: |