我正在从XML转向注释。
我有接口类型House和My,类类型为HouseImpl和MyImpl。 Spring将MyImpl实例注入到MouseImpl实例中,
public class HouseImpl implements House
private My my;
public My getMy2() {
return my;
}
@Autowired
public void setMy2(My my) {
this.my = my;
}
因此HouseImpl
中的属性称为my2
。
在Spring配置文件中,
<context:annotation-config></context:annotation-config>
<bean
id="house"
class="....HouseImpl"
>
...
</bean>
<bean
id="my"
class="my.test.own.spring_book_annotations.MyImpl"
>
</bean>
<bean
id="my2"
class="my.test.own.spring_book_annotations.MyImpl2"
>
</bean>
如果配置是XML格式,那么autowired="byName"
配置中有house
,没有@Autowired
注释,则会注入bean my2
,因为属性名称是my2
(setMy2
是方法)。但是当我们使用注释时,会注入bean my
,因为setMy2
的参数名称是my
。
我的问题是为什么@Autowired在setter函数上不会查看属性名称。
答案 0 :(得分:0)
当在setter上使用@Autowired
并且有多个匹配类型时,容器将查看参数名称以查找要注入的bean。在您的情况下,参数是My my
,因此将注入my
bean。您可以将参数更改为My my2
,或使用@Qualifier("my2")
注入my2
bean。
如果您想使用字段名称,请在字段本身上放置@Autowired
以使用字段注入。
答案 1 :(得分:0)
您的代码就像这样
@Autowired
public void setMy2(My my) {
this.my = my;
}
当您编写注释@Autowired时,它将使用setXXX名称的bean ....这里XXX是My2。
因此注入了my2
id的bean。
为了指定id为my
user @Qualifier注释的bean。
@Autowired
@Qualifier("my")
public void setMy2(My my) {
this.my = my;
}