@Qualifier注解

Spring注解。在使用@Autowired进行依赖注入时,Spring会先去寻找@Primary注解,其次是@Priority注解,最后按bean的名称来实现注入。当出现以下情形时:

    @Component("fooFormatter")
    public class FooFormatter implements Formatter {
        public String format() {
            return "foo";
        }
    }
 
    @Component("barFormatter")
    public class BarFormatter implements Formatter {
        public String format() {
            return "bar";
        }
    }
 
    @Component
    public class FooService {
        @Autowired
        private Formatter formatter;
        
        //todo 
    }

同时有两个实现Formatter接口的bean存在,又没有一个bean的名称为Formatter,spring在执行时会报 NoUniqueBeanDefinitionException异常,使用@Qualifier注解是解决这一问题的方法之一。

通过使用@Qualifier注解,可以指定特定的Spring bean名称,避免spring脑裂:

   @Component
    public class FooService {
        @Autowired
        @Qualifier("fooFormatter")
        private Formatter formatter;
        
        //todo 
    }
 

需要注意的是,如果显示制定bean的名称,spring会自动生成bean的名字,如果一个类名是以两个及以上大写字母开头的,首字母保持大写;其他情况下首字母为小写,在使用@ualifier注解制定名称的时候需要注意。