使用Autowire时,您在哪里设置要连接的bean?

时间:2010-02-09 19:01:47

标签: java spring

当您使用Autowire注释标记某些内容时,您表示您希望使用此特定内容,例如要自动连接DI的类。

现在,您在何处设置要在Autowire中使用的目标类?

参考:http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-annotation-config

所以在下面这个例子中,你自动装配了setter:

public class SimpleMovieLister {

    private MovieFinder movieFinder;

    @Required
    public void setMovieFinder(MovieFinder movieFinder) {
        this.movieFinder = movieFinder;
    }

    // ...
}

Spring会搜索任何实现MovieFinder接口的类吗?

2 个答案:

答案 0 :(得分:5)

  

春天会不会搜索任何课程   实现接口   的MovieFinder?

基本上,是的。当它找到多个时会变得很有趣,它会在上下文启动时引发异常,除非你采取措施来帮助它。

有三种方法可以解决多个autowire候选人:

  • 使用autowire-candidate="false"标记您想要自动装配的那些。
  • 使用primary="true"
  • 标记您 想要自动装配的人
  • 通过指定@Autowired
  • 来限定@Qualifier("TheBeanIWant")注释

以上任何一种都可行,你选择最适合你情况的那种。

@Qualifier("TheBeanIWant")@Resource(name="TheBeanIWant")非常相似,不同之处在于@Qualifier正在帮助Spring缩小自动装配的范围,而@Resource则明确地选择了一个名称的bean,无论何种类型。

答案 1 :(得分:3)

如果上下文中有一个类型为MovieFinder的bean,它将被注入。如果有多个该类型的bean,则会抛出异常。

在构造函数注入的情况下,@Autowired(和@Required我假设)只是按类型自动装配。

如果要使用注释明确指定名称,请使用@Resource(name="beanId")