Spring 3.2默认值为@Autowired

Spring 3.2默认值为@Autowired

问题描述:

什么是Spring 3.2的默认自动装配方法?让我们说我有这个类Spring 3.2默认值为@Autowired

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是类型驱动的,但它提供了一个回退catch来按名称插入bean。 如果要根据名称执行bean查找和注入,则使用@Resource,或者@Autowired和@Qualifier一起使用也可以,即使它在分组bean时更有用。 http://www.spiritwalker-jiang.com/archive/2013/02/11/Understanding-Autowired-annation-in-Spring

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

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

对于回退匹配,bean名称被视为默认限定符 的值。因此,您可以使用id“main”而不是 嵌套限定符元素来定义bean,从而得到相同的匹配结果。 但是,虽然您可以使用此惯例以名称引用特定的 bean,但@Autowired基本上是有关可选语义限定符的类型驱动注入 。这意味着即使使用bean名称回退,限定符值 也总是在该类型匹配集合内缩小语义 ;它们不会在语义上表示对唯一的bean标识的引用 。好的限定符值是“主要”或“EMEA”或“持久性”,表示特定的 组件的特性,它们独立于bean id,可能是 在匿名bean定义的情况下自动生成前面的例子是 。

+0

Autowired的后备功能是什么?以及如何将@Autowired的默认方法设置为byName而不是byType? – user962206 2013-02-14 10:08:23

+0

@ user962206我更新了回答您的问题 – 2013-02-14 10:14:10

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

+0

@Autowired的后备设备是什么? – user962206 2013-02-14 10:13:18

它将通过它的类型执行查找。如果在同一个ApplicationContext中有多个相同类型的bean,则应使用@Qualifier自动装载所有这些bean的名称。

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