0

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;
    }
}

它会按名称执行还是按类型执行?

4

5 回答 5

2

默认情况下,自动装配按类型执行。您可以使用@Qualifier来指定自动装配的名称。

当容器中存在多个相同类型的 bean 时,Spring 将回退到该名称。因此,如果字段名称与 bean 名称匹配,则将使用相应的 bean。

对于回退匹配,bean 名称被视为默认限定符值。因此,您可以使用 id “main”而不是嵌套的限定符元素来定义 bean,从而获得相同的匹配结果。但是,尽管您可以使用此约定按名称引用特定的 bean,但 @Autowired 从根本上讲是关于带有可选语义限定符的类型驱动注入。这意味着限定符值,即使使用 bean 名称回退,也总是在类型匹配集中具有缩小语义;它们不会在语义上表达对唯一 bean id 的引用。好的限定符值是“main”或“EMEA”或“persistent”,表示独立于 bean id 的特定组件的特征,

于 2013-02-14T10:01:08.433 回答
2

@Autowired 是类型驱动的,但它提供了一个后备捕获来按名称注入 bean。如果要根据名称执行 bean 查找和注入,请使用 @Resource,或者 @Autowired 和 @Qualifier 也可以工作,尽管它在对 bean 进行分组时更有用。 http://www.spiritwalker-jiang.com/archive/2013/02/11/Understanding-Autowired-annation-in-Spring

于 2013-02-14T10:05:01.413 回答
1

它将按其类型执行查找。如果您在同一个 ApplicationContext 中有多个相同类型的 bean,那么您应该使用@Qualifier它们各自的名称自动装配所有这些 bean。

于 2013-02-14T10:02:45.587 回答
0

按类型。要使其按名称接线执行,您必须添加注释@Qualifier

于 2013-02-14T10:01:09.387 回答
0

bean name@Qualifier()如果添加到 setter 方法,则被视为默认限定符值。更多_

于 2013-02-14T10:05:28.717 回答