@Autowired是Spring提供的
@Resource是J2EE提供的
@Autowired:
获得对象的方式称之为byType(通过类型),如果需要指定名字,那么需要使@Qualifier(“bean的名字”)
在spring容器中寻找注解标定的类型的对象
1.没有任何类型匹配的对象-------------发生异常
2.有且只有一个匹配类型的对象-------注入成功
3.有两个以及两个以上匹配类型的对象
多个匹配类型对象中有匹配当前变量名为对象名称的 —注入成功
多个匹配类型对重中没有匹配当前变量名为对象名称的 —注入失败
@Autowired 默认第一按照byType(类的类型),第二byName(l类名\类ID)来加载类,所以当存在类型相同,多个beanname时,想注入某个类,就必须指定根据什么beanName查找,不用@Qualifier注解指定,则会以变量名为为beanName进行查找;
@Resource
获得对象的方式称之为byName(通过名称)
1.有和指定要获得的名称的对象匹配的Spring容器中的对象
类型也匹配,注入成功
类型不匹配,注入失败
2.没有和指定要获得的名称的对象匹配的Spring容器中的对象
如果有唯一一个类型匹配的对象,则注入成功
如果没有唯一匹配类型对象,则注入失败
示例代码:
@Service public class UserService implements IUserService { public void query() { System.out.println("hello world"); } } @Service("userService2") public class UserService2 implements IUserService { @Override public void query() { System.out.println("hello code"); } } //----------------------------------------------------------------------------------- @Autowired private IUserService userService; @GetMapping(value = "/query") public void test(){ userService.query(); // 输出:hello world。会以变量名为为beanName进行查找 } @Autowired @Qualifier(value = "userService2") private IUserService userService; @GetMapping(value = "/query") public void test(){ userService.query(); // 输出:hello code } @Autowired private IUserService userService2; @GetMapping(value = "/query") public void test(){ userService2.query(); //hello code } //------------------------------------------------------------------------------- @Resource private IUserService userService; @GetMapping(value = "/query") public void test(){ userService.query(); // hello world } @Resource(name = "userService") private IUserService userService; @GetMapping(value = "/query") public void test(){ userService.query(); //hello world } @Resource private IUserService userService2; @GetMapping(value = "/query") public void test(){ userService2.query(); //hello code } @Resource(name = "userService2") private IUserService userService; @GetMapping(value = "/query") public void test(){ userService.query(); //hello code } @Resource(type = UserService2.class) private IUserService userService2; @GetMapping(value = "/query") public void test(){ userService2.query(); //hello code } @Resource(type = UserService2.class) private IUserService entity; @GetMapping(value = "/query") public void test(){ entity.query(); //hello code }