IoC之@Autowired注解
@Autowired注解在查找要注入的bean时,首先会按照类型进行匹配。如果有多个匹配的bean,就会根据名称进行匹配。
具体来说,如果被注入的属性或构造函数参数的类型在容器中有且只有一个对应的bean,那么@Autowired注解就会直接将该bean注入到该属性或构造函数参数中。例如:
@Autowired
private UserService userService;
在这个例子中,如果容器中只有一个类型为UserService的bean,那么它就会被自动注入到userService属性中。
但是,如果容器中存在多个类型为UserService的bean,就需要通过名称进行匹配。此时,可以在@Autowired注解中使用@Qualifier注解来指定要注入的bean的名称,如果不使用@Qualifier注解就会使用属性名。
例如:
@Autowired
@Qualifier("userService2")
private UserService userService;
在这个例子中,如果容器中有多个类型为UserService的bean,那么它会根据@Qualifier注解中指定的名称来匹配要注入的bean。如果找到了名为"userService2"的bean,就会将它注入到userService属性中。
Autowired注解会优先按照类型进行匹配,如果存在多个匹配的bean,就会再按照名称进行匹配。如果仍然无法找到唯一的匹配项,就会抛出异常。