Spring @Autowired用2个相同类型的bean

我有以下定义。

@Autowired

DaoType1<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

回到顶部