Spring 注解 @Resource和@Autowired

 @Resource和@Autowired两者都是做bean的注入使用。

其实@Resource并不是Spring的注解,他的包是javax.annotation.Resource 需要导入。但是Spring支持该注解的注入。

共同点:两者都可以写在字段和setter方法上。两者如果都写在字段上,就不需要写写setter方法。

不同点如下:

先来说一说@Autowired

    @Autowired为Spring提供的注解,

    需导入Package:org.springframework.beans.factory.annotation.Autowired;

    只按照byType 注入。

@Autowired 
private UserDao  userDao;//用于字段上
@Autowired
public void setUserDao(UserDao userDao) {//用于属性的setter方法上this.userDao= userDao;
}

 

    @Autowired注解是按类型装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它required属性为false。如果我们想使用按名称装配,可以结合@Qualifier注解一起使用。如下:

@Autowired  @Qualifier("userDao")
private PersonDao  personDao;

 

 再说说@Resource

@Resource默认按 byName 自动注入,由J2EE提供。

    需导入Package:  javax.annotation.Resource

    @Resource有两个中重要的属性:name和type ,而Spring将@Resource注解的name属性解析为bean的

    名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用

    type属性时则使用 byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。

@Resource(name=“userDao”)
private UserDao  userDao;//用于字段上
@Resource(name=“userDao”)
public void setUserDao(UserDao userDao) {//用于属性的setter方法上this.userDao= userDao;
}

 

    注:最好是将@Resource放在setter方法上。

    @Resource装配顺序 

  (1). 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常;

  (2). 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常;

  (3). 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常;

  (4). 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;

    @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入。

 


 

本文转载自:http://blog.csdn.net/angus_17/article/details/7543478

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/249024.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

洛谷 P1091 合唱队型

很容易想到维护一个最长上升子序列和一个最长下降子序列。然后枚举一个点k,取所有以k结尾的最长上升子序列和以k开头的最长下降子序列的长度的和中最大的,表示留下的人数。再用总人数减去这个,等于出队人数 另外类似的一道题:最长…

PHP常用的自定义函数

PHP常用的自定义函数 目录 php常用自定义函数类下载php 设置字符编码为utf-8路径格式化(替换双斜线为单斜线)转码打印输出api返回信息字符串截取 方法一:方法二:数组 字符串 对象 json格式的字符串互转强制类型转换php序列化serialize与返回序列化unserialeze创建日志文件获取i…

Spring注解@Component、@Repository、@Service、@Controller区别

很长时间没做web项目都把以前学的那点框架知识忘光了,今天把以前做的一个项目翻出来看一下发现用Component标记一个组件,而网上有的用Service标记组件,我晕就查了一下资料: Spring 2.5 中除了提供 Component 注释外,还…

春第十周作业

作业: 这个作业属于那个课程C语言程序设计II这个作业要求在哪里https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/3162我在这个课程的目标是阅读并学习这个作业在那个具体方面帮助我实现目标知道了我们以后工作所需的是雇主所需的参…

在原生js中的事件监听方法

一、传统事件绑定方法我们在学习的时候,最初接触的事件绑定方式大多是传统事件绑定方法。传统事件绑定方法事例如下: window.οnlοadfunction(){alert("页面已加载"); } document.getElementById("btn").οnclickfunction(){alert(…

MySql修改数据库编码为UTF8

mysql 创建 数据库时指定编码很重要,很多开发者都使用了默认编码,乱码问题可是防不胜防。制定数据库的编码可以很大程度上避免倒入导出带来的乱码问题。 网页数据一般采用UTF8编码,而数据库默认为latin 。我们可以通过修改数据库默认编码方式…

第六次作业(C语言)

心得体会 该题主要涉及知识点有:1、函数的定义;2、函数的调用(即prime函数的调用);3、素数的判断;4、大小排序。 看到题时我首先想到了嵌套循环,可是仔细一看题目要求的是用prime函数的调用&…

Javascript系列——对象元素的数组去重实现

概要 这是一篇记录文,记录数组操作对象去重的实现。 需求 有这样一个数组 [{_id: 123,name: 张三 },{_id: 124,name: 李四 },{_id: 123,name: 张三 }] 实际上我们只需要 [{_id: 123,name: 张三 },{_id: 124,name: 李四 }] 去重 简单数组的去重 Array.from(new Set([…

关于__getattribute__

先看一个案例 class Tree(object):def __init__(self,name):self.namenameself.cateplantdef __getattribute__(self, item):if item大树:print(log 大树)return 我爱大树else:return object.__getattribute__(self,item)aaTree(rrrr) print(aa.name) print(aa.cate) 运行结果…

通过Navicat for MySQL远程连接的时候报错mysql 1130的解决方法

来源:互联网 作者:佚名 时间:10-16 18:41:20 【大 中 小】 错误代码是1130,ERROR 1130: Host xxx.xxx.xxx.xxx is not allowed to connect to this MySQL server 是无法给远程连接的用户权限问题 Navicat for mysql 1130错误 用…

Java Language Changes for Java SE 9

Java9引入了module模块的概念,是类与接口和数据资源的一种封装,并可以声明与其他模块的依赖关系。这里总结一下Java9带来的新特性。更简练的try-with-resources语句final Resource resource1 new Resource("resource1");//a final resourceRe…

ProtocolHandler继承体系

转载于:https://www.cnblogs.com/GooPolaris/p/10815072.html

mysql数据库存储过程及调用方法

mysql数据库存储过程及调用方法 mysql5.0以后就支持存储过程了,目前mysql的6.0Alpha版也已经推出。6.0不仅支持大型数据库如oracle等的绝大部分功 能,如存储过程、视图、触发器、job等等,而且修正了这些功能所存在的bug,其中6.0.1…

红蜻蜓

日本人なら一度は耳にしたことのある曲でしょう。忘れかけている里山の風景が目に浮かびます。このあたりは昔養蚕が盛んで、何処へ行っても桑畑があったものでしたが、最近はとんと見かけません。小さい頃、よく桑の実をつんで食べたものでした。(このあたりでは&q…

elastic学习笔记

要点 不同工具之间版本匹配很重要由点及面,先实践起来再学细节的原理和使用 技术栈 laravel5.5框架scout组件elasticsearch6.3.0搜索引擎辅助 elasticsearch-head 查看集群数据可视化 中文分词插件Ik介绍 laravel是一款现代化的php框架es是搜索引擎es-head是管理查看…

mysql 存储过程中limit

mysql 存储过程中limit 1、mysql的高版本(5.5),存储过程中的limit可以使用变量,如下:select * from student limit iStart,iNum; 2、mysql的低版本(5.1),存储过程中的limit不能使用…

高频ES6

var promise new Promise((resolve, reject)> {if (操作成功) {resolve (value)}else{reject(error)} }) promise.than(function (value) {/*成功*/}, function(value) {/*失败*/}) Promise是异步编程的一种解决方案, 比传统的解决方案--回调函数和事件更加强大.由社区最早…

NodeJS+Express+MongoDB - 张果 - 博客园

目录 一、MongoDB 1.1、安装MongoDB 1.1.1、配置运行环境1.1.2、运行MongoDB1.2、数据库操作 1.2.1、创建数据库与查看数据库1.2.2、删除数据库1.2.3、插入数据1.2.4、查询数据1.2.5、修改1.2.6、删除二、NodeJS访问MongoDB 2.1、安装MongoDB访问驱动2.2、添加数据2.3、修改数…

一个好用的浏览器暗色浏览插件 Dark Reader

转载于:https://www.cnblogs.com/tyong/p/9973363.html

Android小测验感受

1.运行出现“...keeps stopping” 因为 前台变量“无值”而后台却进行“获取变量值” 2.switch(int,char...) case break;(不能忘) 3.转载于:https://www.cnblogs.com/tangxx1996/p/10825134.html