@Autowired是按 byType 自动注入。如果当spring上下文中存在不止一个接口类型的bean时,就会抛出BeanCreationException异常。我们可以使用@Qualifier配合@Autowired来解决这些问题。如下:
@Autowired
@Qualifier("userServiceImpl")
public IUserService userService;
这样Spring会找到id为userServiceImpl的bean进行装配
@Resource 则默认按 byName 自动注入
注解 @Resource 的装配顺序:
1. 如果同时指定了 name 和 type,则从 Spring 上下文中找到唯一匹配的 bean 进行装配,找不到则抛出异常;
2. 如果指定了 name,则从上下文中查找名称(id)匹配的 bean 进行装配,找不到则抛出异常;
3. 如果指定了 type,则从上下文中找到类型匹配的唯一 bean 进行装配,找不到或者找到多个,都会抛出异常;
4. 如果既没有指定 name,又没有指定 type,则自动按照 byName 方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配成功,则进行自动装配。