Spring 3.2 默认为@Autowired

问题描述 投票:0回答:5

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?

java spring dependency-injection inversion-of-control autowired
5个回答
2
投票

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


2
投票

默认情况下,自动装配是按类型执行的。您可以使用

@Qualifier
指定自动装配的名称。

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

对于后备匹配,bean 名称被视为默认限定符 价值。因此,您可以使用 id“main”而不是 id 来定义 bean 嵌套限定符元素,导致相同的匹配结果。 但是,尽管您可以使用此约定来引用特定的 从名字上看,@Autowired 本质上是关于类型驱动注入的 beans 带有可选的语义限定符。这意味着限定符值, 即使使用 bean 名称回退,也始终具有缩小的语义 在类型匹配集中;它们没有在语义上表达 对唯一 bean id 的引用。好的限定符值是“main”或 “EMEA”或“持久”,表达特定的特征 独立于 bean id 的组件,可能是 在匿名 bean 定义的情况下自动生成,如 前面的例子。


1
投票

它将按其类型执行查找。如果您在同一个 ApplicationContext 中有多个相同类型的 bean,那么您应该使用

@Qualifier
按各自的名称自动装配所有这些 bean。


0
投票

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

@Qualifier


0
投票
如果将

bean name

 添加到 setter 方法,则 
@Qualifier()
被视为默认限定符值。对于更多

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.