@Resource和@Autowired区别
@Resource和@Autowired都是做bean的注入时使用
历史: @Autowired 属于Spring的注解 org.springframework.beans.factory.annotation.Autowired
@Resource 不属于Spring的注解,JDK1.6支持的注解 javax.annotation.Resource
共同点:装配bean. 写在字段上,或写在setter方法
不同点:@Autowired 默认按类型装配
依赖对象必须存在,如果要允许null值,可以设置它的required属性为false @Autowired(required=false)
也可以使用名称装配,配合@Qualifier注解
@Resource 默认按名称进行装配,通过name属性进行指定
看个例子:
新建一个接口BaseService,两个实现类AServiceImpl、BServiceImpl
public interface BaseService {
void print();
}
@Service
public class AServiceImpl implements BaseService { @Override
public void print() {
System.out.println("aaa");
} }
@Service
public class BServiceImpl implements BaseService { @Override
public void print() {
System.out.println("bbb");
} }
再建一个测试类:
/**
* 测试@Resource与@Autowired注入的区别
*
* @author xuwenjin
*/
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = App.class)
public class TestSet { @Autowired
private BaseService service; @Test
public void test(){
String className = service.getClass().getName();
System.out.println(className);
service.print();
} }
执行test方法,报错,结果如下:
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'com.xwj.service.BaseService' available: expected single matching bean but found : AServiceImpl,BServiceImpl
在@Autowired下增加@Qualifier注解
@Autowired
@Qualifier("AServiceImpl")
private BaseService service;
再执行test方法,成功,结果如下:
com.xwj.service.AServiceImpl
aaa
我们再来试试@Resource注解
@Resource
private BaseService service;
执行test方法,报错异常跟只用@Autowired情况一样。再加上name属性:
@Resource(name = "AServiceImpl")
private BaseService service;
再执行test方法,成功
总结:
一个接口,多个实现类,Autowired就不知道注入哪一个实现类,而Resource有name属性,可以区分。
参考资料:https://www.zhihu.com/question/39356740
@Resource和@Autowired区别的更多相关文章
- Spring注解@Resource和@Autowired区别对比
转载:http://www.cnblogs.com/think-in-java/p/5474740.html @Resource和@Autowired都是做bean的注入时使用,其实@Resource ...
- 注解@Resource和@Autowired区别对比
@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Sprin ...
- Spring注解@Resource和@Autowired区别对比、spring扫描的默认bean的Id、程序获取spring容器对象
-------------------------注解扫面的bean的ID问题-------------------------- 0.前提需要明白注解扫描出来的bean的id默认是类名首字母小写,当 ...
- 【转载】Spring注解@Resource和@Autowired区别对比
@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Sprin ...
- [spring]@Resource和@Autowired区别对比
@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Sprin ...
- Resource和Autowired区别
1.使用场景 @Resource和@Autowired都是做bean注入时使用 @Resource是jdk的注解,不是spring的注解:由包javax.annotation.Resource提供,需 ...
- @Resource 和 @Autowired 区别
spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource.@PostConstruct以及@PreDestroy. @Resour ...
- @Resource与@Autowired区别
每次理解清楚,过段时间就忘了,还是记一下,方便之后再回看. @ Autowired 是spring提供,包含3种自动装配Bean形式 1.@Autowired默认按类型byType匹配,自动装配Bea ...
- @Resource 和@Autowired区别
@Autowired 该注解是由spring提供的 按照类型注入 public class UserService { @Autowired private UserDao userDao; } 这样 ...
随机推荐
- 基于Quartz.net的远程任务管理系统 一
在上一篇绪中,已经介绍了整个项目的情况下了,接下来就是开始一步步做起来了. 首先:先整个我们的Job任务表,以及Job执行日志表.SQL如下: drop table if exists job_inf ...
- 用eFrameWork框架实现快捷搜索
软件系统最大的价值在于用心去帮客户解决各种痛点,需要做好方方面面的工作,数据的快捷搜索就是其中比较重要的一个环节.那么,什么样的搜索方式才是最高效快捷的呢?目前能想到最好的办法是用名称声母检索,用声母 ...
- C# winform 去掉button的边框颜色
Winform的话,设置FlatStyle为Flat,并且设置FlatAppearance下的BorderSize为0,foreColor设置成web下的Transparent
- Json/XML序列化和反序列化
1.json序列化和反序列化 序列化是将对象状态转换为可保持或传输的格式的过程; 反序列化,它将流转换为对象; 1)Json.Net 推荐使用Json.Net类库,需要引入的命名空间; 序列化:Jso ...
- Python3.5 学习八 附加知识点 paramiko和rsa非对称秘钥的适用
关于paramiko: SSH SFTP 机器上没有安装该模块,只是初步了解了下,没有细细研究. 可能以后只有做运维的才能用到的吧 利用秘钥,在ssh中不输入用户名密码进行登录 利用秘钥进行FTP操作 ...
- webpack快速入门——CSS中的图片处理
1.首先在网上随便找一张图片,在src下新建images文件夹,将图片放在文件夹内 2.在index.html中写入代码:<div id="pic"></div& ...
- apt错误
安装软件遇到错误,不管安装什么软件都有错误. apt-get install softname 报错如下:E: Sub-process /usr/bin/dpkg returned an error ...
- WIKI常用的表格设计模板
域名服务器管理表格 数据库管理表格 软件路径说明表格 开发测试环境虚拟机表格
- Sip协议
会话初始协议.SIP是IETF标准进程的一部分,它是在诸如SMTP(简单邮件传送协议)和HTTP(超文本传送协议)基础之上建立起来的(请求应答的通讯模式).微信采用了自主研发的SYNC协议,他通过“握 ...
- maven安装以及eclipse配置maven
详细地址: http://jingyan.baidu.com/article/295430f136e8e00c7e0050b9.html 介绍安装maven,配置Maven环境变量,同时在Eclips ...