Spring @Autowired用2个相同类型的bean
我有以下定义。
@AutowiredDaoType1<object1> someDao;
@Autowired
DaoType1<object1> someListDao;
在我的bean定义中,我有两个相同类型的bean
<bean id="someDao" class="com.example.DaoType1" /><bean id="someListDao" class="com.example.DaoType1" />
如果有所不同,则从另一个xml文件导入第二个bean。它们也设置了不同的属性。为什么spring不会抛出错误,因为已经定义了2个相同类型的bean。它是否使用变量名,因为它们与bean
id匹配。dao是不同的,如果我对两个不同的bean使用@Qualifiers,则功能可以按预期工作。
这是一个更简洁的版本。我没有考虑其他豆类,因为它们不相关。
applicationContext.xml
<import resource="classpath:dm-services-crud.xml"/><bean id="ruleListCrudService" class="com.idna.dm.service.crud.impl.RuleCrudServiceImpl">
<property name="crudDao" ref="ruleListCrudDao" />
</bean>
dm-services-crud.xml
<bean id="ruleCrudService" class="com.idna.dm.service.crud.impl.RuleCrudServiceImpl"> <property name="crudDao" ref="ruleCrudDao" />
<property name="ruleNetworkOfNodesCrudService" ref="ruleNetworkOfNodesCrudService" />
<property name="elementMappingsCrudService" ref="elementMappingsCrudService" />
<property name="ruleCrudDao" ref="newRuleCrudDao"/>
</bean>
default-autowire根本不在我的任何xml文件中。
回答:
这似乎是预期的行为。该文档说:
按名字
按属性名称自动布线。Spring寻找与需要自动装配的属性同名的bean。例如,如果一个bean定义被设置为按名称自动装配,并且包含一个master属性(即,它具有setMaster(..)方法),Spring将查找一个名为master的bean定义,并使用它来设置属性。
我想这意味着您已经default-autowire="byName"
在applicationContext.xml中指定了。
但是,重构可能会以不可预测的方式影响此操作。这就是为什么(我认为)建议根据类型切换到自动装配,并通过使用来消除Bean歧义的原因。
@Qualifier
(如您所述)@Resource
而不是@Autowired
(如skaffman所述)
以上是 Spring @Autowired用2个相同类型的bean 的全部内容, 来源链接: utcz.com/qa/435263.html