8.2.6 自动装配和精确装配3 @Qualifier注解
@Qualifier注解
正如上面看到的,@Autowired
总是采用byType
的自动装配策略,在这种策略下,符合自动装配类型的候选Bean
实例常常有多个,这个时候就可能引起异常(对于数组类型参数、集合类型参数则不会)。
为了实现精确的自动装配, Spring
提供了@Qualifier
注解,通过使用 @Qualifier
,允许根据Bean
的id
来执行自动装配。
使用@Qualifier
注解的意义并不大,如果程序使用@Autowired
和@Qualifier
实现精确的自动装配,还不如直接使用@Resource
注解执行依赖注入。
@Qualifier修饰实例变量
@Qualifier
通常可用于修饰实例变量,如下面的代码所示
1 |
|
上面的程序中指定了axe
实例变量将使用自动装配
,且精确指定了被装配的Bean
实例名称是steelAxe
,这意味着Spring
将会搜索容器中名为steelAxe
的Axe
实例,并将该实例设为该axe
实例变量的值。
@Qualifier修饰方法的形式参数
除此之外, Spring
还允许使用@Qualifier
标注方法的形参,如下面的代码所示:
1 |
|
上面代码中的粗体字注解指明Spring
应该搜索容器中id
为steelAxe
的Axe
实例,并将该实例作为setAxe()
方法的参数传入。