Spring 3.2默认的自动装配方法是什么?所以假设我有这门课
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;
}
}
它会执行 byName 还是会执行 byType?
@Autowired
是类型驱动的,但它提供了一个后备捕获来按名称注入 bean。
如果您想根据名称执行 Bean 查找和注入,请使用 @Resource
,或者 @Autowired
和 @Qualifier
也可以工作,尽管它在对 Bean 进行分组时更有用。
http://www.spiritwalker-jian.com/archive/2013/02/11/Understanding-Autowired-annation-in-Spring
默认情况下,自动装配是按类型执行的。您可以使用
@Qualifier
指定自动装配的名称。
当容器中存在多个相同类型的bean时,Spring将回退到名称。因此,如果字段名称与 bean 名称匹配,则将使用相应的 bean。
对于后备匹配,bean 名称被视为默认限定符 价值。因此,您可以使用 id“main”而不是 id 来定义 bean 嵌套限定符元素,导致相同的匹配结果。 但是,尽管您可以使用此约定来引用特定的 从名字上看,@Autowired 本质上是关于类型驱动注入的 beans 带有可选的语义限定符。这意味着限定符值, 即使使用 bean 名称回退,也始终具有缩小的语义 在类型匹配集中;它们没有在语义上表达 对唯一 bean id 的引用。好的限定符值是“main”或 “EMEA”或“持久”,表达特定的特征 独立于 bean id 的组件,可能是 在匿名 bean 定义的情况下自动生成,如 前面的例子。
它将按其类型执行查找。如果您在同一个 ApplicationContext 中有多个相同类型的 bean,那么您应该使用
@Qualifier
按各自的名称自动装配所有这些 bean。
按类型。要使其按名称接线执行,您必须添加注释
@Qualifier