java Spring 3.2@Autowired的默认值

hgncfbus  于 11个月前  发布在  Java
关注(0)|答案(5)|浏览(88)

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

字符串
它是按名称执行还是按类型执行?

d8tt03nd

d8tt03nd1#

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

sh7euo9m

sh7euo9m2#

默认情况下,自动装配是按类型执行的。您可以使用@Qualifier指定自动装配的名称。
当容器中存在多个相同类型的bean时,Spring将回退到名称。因此,如果字段名称与bean名称匹配,则将使用相应的bean。
对于回退匹配,bean名称被认为是默认的限定符值。因此,您可以使用id“main”而不是嵌套的限定符元素来定义bean,从而导致相同的匹配结果。然而,尽管您可以使用此约定通过名称引用特定的bean,但@Autowired基本上是关于使用可选的语义限定符的类型驱动注入。这意味着限定符值,即使使用bean名称回退,也总是在类型匹配集内具有缩小语义;它们在语义上不表示对唯一bean ID的引用。好的限定符值是“main”或“EMEA”或“persistent”,表示独立于bean ID的特定组件的特征,在匿名bean定义的情况下,可以自动生成该值,如前面的示例中的定义。

krugob8w

krugob8w3#

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

s8vozzvw

s8vozzvw4#

按类型。要使其按名称连接,您必须添加注解@Qualifier

1szpjjfi

1szpjjfi5#

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

相关问题