@Autowired注解与@Resource注解的区别(详细)
相信对现在Java码农来说,@Autowired跟@Resource并不陌生,二者都可以自动注入,但是两者的区别很多时候并没有被注意到。
一、注解的出处
@Autowired是Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired
@Resource是由J2EE提供的注解,需要导入包javax.annotation.Resource
也就是说@Autowired是外部包导入的,而@Resource是J2EE自己的
二、自动注入规则
@Autowired默认按照byType自动注入
@Autowired采取的是按照类型进行自动注入的,Autowired源码中只有一个属性required(稍后介绍)。
说明@Autowired无法人为去干预注入规则的,然后当容器中同一类型的bean存在多个的话,@Autowired该如何去选择呢,这时就需要@Qualifier注解来帮忙了。
@Qualifier跟@Autowired来自同一包下,存在一个属性value,我们可以通过value属性来确定@Autowired具体注入的是哪一个bean。
如果匹配不到对象时,将会抛出异常 BeanCreationException。
如果匹配到多个对象时,也会抛出异常。
public class UserService {
@Autowired
@Qualifier(value="userDao1")
private UserDao userDao;
private ManDao manDao;
@Autowired
public void setUserDao(@Qualifier("manDao") ManDao manDao) {
this.manDao = manDao;
}
}
@Resource默认按照byName自动注入
@Resource注解在注入规则上存在两个属性:name、type
1、若没有使用属性,则通过反射机制,默认按照byName方式进行装配,如果没有匹配,则再类型进行装配;
2、若只使用了name属性,则使用byName的自动注入策略,从上下文中查找名称id,如果匹配不到则抛出异常;
3、若只使用了type属性,则使用byType自动注入策略,从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个都会抛出异常;
4、若两个属性都使用了,则需要找到唯一匹配的bean进行装配,找不到则抛出异常。
public class UserService {
@Resource
private UserDao userDao;
@Resource(name="studentDao")
private StudentDao studentDao;
@Resource(type="TeacherDao")
private TeacherDao teacherDao;
@Resource(name="manDao",type="ManDao")
private ManDao manDao;
}
三、注入时对象是否存在
@Autowired:默认按照类型进行装配,默认情况下要求依赖的对象必须存在,如果需要允许null值,则需要设置required属性为false,@Autowired(required=false)。
@Resource:默认按照名称进行装配,允许为null。
四、使用位置
两者都可以写在字段和setter方法上,如果写在字段上,那么就不需要在写setter方法。
推荐使用@Resource注解在字段上,这样不仅不需要写setter方法了,而且由于@Resource属于J2EE,降低与spring的耦合。
@Autowired注解与@Resource注解的区别(详细)的更多相关文章
- Spring中@Autowired注解、@Resource注解的区别 (zz)
Spring中@Autowired注解.@Resource注解的区别 Spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource.@ ...
- @Autowired注解与@resource注解的区别(十分详细)
背景: 今天下班路上看到一个大货车,于是想到了装配,然后脑海里跳出了一个注解@Autowired(自动装配),于是又想到最近工作项目用的都是@Resource注解来进行装配.于是本着学什么东西都要一钻 ...
- Spring中@Autowired注解、@Resource注解的区别
Spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource.@PostConstruct以及@PreDestroy. @Resour ...
- 转:Spring中@Autowired注解、@Resource注解的区别
Pay attention: When using these annotations, the object itself has to be created by Spring context. ...
- @Resource或者@Autowired作用/Spring中@Autowired注解、@Resource注解的区别
@Resource或者@Autowired作用不用写set get就能注入,当然,前提是你已经开启了注解功能. spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定 ...
- @Autowired注解与@Resource注解的区别与用法
Spring不但支持自己定义的@Autowired注解,还支持JSR-250规范定义的几个注解.如:@Resource.@PostConstruct及@PreDestroy 1. @Autowired ...
- spring--Springmvc中@Autowired注解与@Resource注解的区别
Spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource.@PostConstruct以及@PreDestroy. @Resour ...
- Spring中 @Autowired注解与@Resource注解的区别
Spring中 @Autowired注解与@Resource注解的区别在Spring 3.X中经常使用到@Autowired和@Resource进行装配.这两个注解的差异在何处???相同点:@Reso ...
- Spring5:@Autowired注解、@Resource注解和@Service注解
什么是注解 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点: 1.如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大:如果按需求分 ...
随机推荐
- 015.CI4框架CodeIgniter数据库操作之:Query带参数查询数
01.我们在Models中写数据库的操作.具体的查询代码如下: <?php namespace App\Models\System; use CodeIgniter\Model; class U ...
- 使用WinDbg分析蓝屏dump原因
大多数人或许都经历过系统蓝屏问题,然而大多数人不清楚该怎么处理蓝屏问题,这里主要对系统蓝屏做一些解释,同时介绍下蓝屏问题分析工具WinDbg分析蓝屏问题的一般步骤. 微软官方对蓝屏的定义是,当系统遇到 ...
- 浅析Java NIO
浅析Java NIO 前言 在说NIO之前,先来说说IO的读写原理.我们都知道Java中的IO流可以分为网络IO流和文件IO流,前者在网络中使用,后者在操作文件时使用.但实际上两种流区别并不是太大 ...
- SSM文件上传要点总结
文件的上传要点: 1.表单方面:enctype="multitype/form-data" 编码方式选择混编码 input 类型采用file 2.实体类一定要进行序列化,也就是im ...
- CSS - 美化字体 => CSS的-font-smoothin属性优化
body{ margin: 0; font-family: Arial, Helvetica, sans-serif; line-height: 1.2em; back ...
- mencoder及ffmpeg的基本命令
前段时间想在ubuntu下对视频进行格式转换,多方查找之后,接触了mencoder与ffmpeg. mencoder mencoder 是一款命令行方式的视频处理软件,是Mplayer自带的编码工具, ...
- swift中数据之间的转换
1.swift 开发 - NSDictionary与NSData互转.Dictionary与Data互转 https://blog.csdn.net/SuperMageHuang/article/de ...
- java排序,效率高的是哪种排序方法
和所有其他语言是一样的.应该还是快速排序效率最高. public static void bubbleSort(int a[]) {int len = a.length;for (int i = 0; ...
- 细说 OLAP 与 OLTP
OLAP (Online analytical processing)[联机分析处理] 起源 数据库概念最初源于1962年Kenneth Iverson发表的名为"A Programming ...
- [Updating]点分治学习笔记
Upd \(2020/2/15\),又补了一题 LuoguP2664 树上游戏 \(2020/2/14\),补了一道例题 LuoguP3085 [USACO13OPEN]阴和阳Yin and Yang ...