Spring中@Autowired和@Resource的区别及详细使用
2023-03-07 09:16:22 时间
@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
相关文章
- 测试用例
- 学习阿里云
- 泼辣修图2023软件网页版Polarr下载
- 形式化验证工具TLA+:程序员视角的入门之道
- 一张图玩转云上办公
- LinkedIn同一条好友邀请信息给大量的人发,会导致领英账号被封吗?
- 垃圾桶溢出识别系统
- ECS的使用感想
- 机器视觉工程师们,2023你准备好跳槽了吗?不妨先看看这篇文章。(销售我们暂时不讨论)
- 初次使用ESC心得
- Meta业绩下滑,给元宇宙投资泼冷水?
- 复杂美公链技术重要特色:平行公链架构
- 2014年TOP10!神仙打架的一年,mi.com也只能排第二。
- 新产品研发中的DFSS思考
- 如何购买域名
- spring springboot关于异步线程实践案例
- 云服务器使用心得及经验分享
- 高等教育中的精益六西格玛
- 疫情大环境下科技互联网公司开源节流降本增效
- 飞天加速计划·高校学生在家实践(体验云服务器ECS)