@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()方法的参数传入。