@Primary和@Qualifier注解,都是处理@Autowired注入时,发现多个相同类型的冲突时,进行解决。
实际项目中,@Autowired,默认是byType注入,当发现多个实现类的时候,@Autowired会根据byName的方式注入,name默认就是根据变量名来的。
该例子中,则是先根据 UserService.class,然后根据 userService的name。
@Autowired
private UserService userService;
@Primary注解
使用@Autowired注解执行注入时,默认是byType,当Spring容器中存在多个相同类型的Bean实例时,@Primary注解可以添加在类上,指定优先注入的Bean实例。
@Bean
@Primary
public Employee johnEmployee() {
return new Employee("john");
}
@Qualifier注解
注入时的限定符,用来指定注入哪一个实现类。通过byName的方式实现。
该例显示将注入name为customService的实现类。
@Autowired
@Qualifier("customService")
private UserService userService;