@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
}
永远的 Hello World