Spring 3.2的默认autowire方法是什么?
public class Saxophonist implements IPerform{
@Override
public String perform() {
return "I am A Saxophonist and I am Playing The : "+ saxophone;
}
private Instrument saxophone;
public Instrument getSaxophone() {
return saxophone;
}
@Autowired
public void setSaxophone(Instrument saxophone) {
this.saxophone = saxophone;
}
}
字符串
它是按名称执行还是按类型执行?
5条答案
按热度按时间d8tt03nd1#
@Autowired
是类型驱动的,但它提供了一个回退捕获来按名称注入bean。如果您想根据名称执行bean查找和注入,请使用@Resource
,或者@Autowired
沿着@Qualifier
也可以工作,尽管它在对bean进行分组时更有用。http://www.spiritwalker-jiang.com/archive/2013/02/11/Understanding-Autowired-annation-in-Springsh7euo9m2#
默认情况下,自动装配是按类型执行的。您可以使用
@Qualifier
指定自动装配的名称。当容器中存在多个相同类型的bean时,Spring将回退到名称。因此,如果字段名称与bean名称匹配,则将使用相应的bean。
对于回退匹配,bean名称被认为是默认的限定符值。因此,您可以使用id“main”而不是嵌套的限定符元素来定义bean,从而导致相同的匹配结果。然而,尽管您可以使用此约定通过名称引用特定的bean,但@Autowired基本上是关于使用可选的语义限定符的类型驱动注入。这意味着限定符值,即使使用bean名称回退,也总是在类型匹配集内具有缩小语义;它们在语义上不表示对唯一bean ID的引用。好的限定符值是“main”或“EMEA”或“persistent”,表示独立于bean ID的特定组件的特征,在匿名bean定义的情况下,可以自动生成该值,如前面的示例中的定义。
krugob8w3#
它将根据其类型执行查找。如果您在同一ApplicationContext中有多个相同类型的bean,那么您应该使用
@Qualifier
根据其各自的名称自动连接所有这些bean。s8vozzvw4#
按类型。要使其按名称连接,您必须添加注解
@Qualifier
1szpjjfi5#
如果将
@Qualifier()
添加到setter方法中,则bean name
被视为默认限定符值。