鸣谢:http://my.oschina.net/u/216467/blog/205951

@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

首先通过eclipe查看其官方解释:

javax.annotation.Resource

The Resource annotation marks a resource that is needed by the application.
This annotation may be applied to an application component class, or to fields
or methods of the component class. When the annotation is applied to a field or
method, the container will inject an instance of the requested resource into the
application component when the component is initialized. If the annotation is
applied to the component class, the annotation declares a resource that the
application will look up at runtime.

--资源注释标识应用程序所需要的资源。此注释可应用于应用组件类,或用于组件类的字段或方法。当将注释应用于某个字段或方法时,容器将在该组件初始化时向应用程序组件注入所需资源的实例。如果将注释应用于组件类,则该注释声明该应用程序将在运行时查找该资源。

@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自动注入。

Spring 注解 @Resource和@Autowired(转)的更多相关文章

  1. Spring注解@Resource和@Autowired区别对比

    转载:http://www.cnblogs.com/think-in-java/p/5474740.html @Resource和@Autowired都是做bean的注入时使用,其实@Resource ...

  2. Spring注解 @Resource和@Autowired

    @Resource和@Autowired两者都是做bean的注入使用.其实@Resource并不是Spring的注解,他的包是javax.annotation.Resource 需要导入.但是Spri ...

  3. Spring 注解 @Resource和@Autowired

    @Resource和@Autowired两者都是做bean的注入使用. 其实@Resource并不是Spring的注解,他的包是javax.annotation.Resource 需要导入.但是Spr ...

  4. Spring注解@Resource和@Autowired的区别

    @Resource和@Autowired都是用来做bean的依赖注入的,两者都可以写在字段和setter方法上. java为我们提供了 javax.annotation.Resource这个注解. s ...

  5. Spring注解@Resource和@Autowired区别对比、spring扫描的默认bean的Id、程序获取spring容器对象

    -------------------------注解扫面的bean的ID问题-------------------------- 0.前提需要明白注解扫描出来的bean的id默认是类名首字母小写,当 ...

  6. 【转载】Spring注解@Resource和@Autowired区别对比

    @Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Sprin ...

  7. 注解 @Resource与@Autowired与@Component的使用

    在java代码中使用@Autowired或@Resource注解方式进行装配,这两个注解的区别是:@Autowired 默认按类型装配,@Resource默认按名称装配,当找不到与名称匹配的bean才 ...

  8. spring中@Resource和@Autowired理解

    一.@Resource的理解 @Resource在bean注入的时候使用,@Resource所属包其实不是spring,而是javax.annotation.Resource,只不过spring支持该 ...

  9. 注解@Resource和@Autowired区别对比

    @Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Sprin ...

随机推荐

  1. JMS - Exceptions

    The JMSException JMS defines JMSException as the root class for exceptions thrown by JMS methods. JM ...

  2. 并行执行的Service,以媒体转码成新格式为例

    大家众所周知,IntentService内置的handler只有一个线程,而AsyncTask又只适合时间至多几秒的操作,所以我们关注使用ExecutorService建立并行执行.为了确保Servi ...

  3. (转)IDG副总裁楼军:顶级VC青睐什么样的创业者

    学习能力是创业者的第一能力 创业者首先要有格局观和很强的学习能力. 具体什么意思?比如说去年IDG投了一个做C2C平台的海淘项目,创始人之前其实是帮他爱人做海淘代购.他爱人是一个代购买手,赚得还不错, ...

  4. UVaLive 3708

    题意:周长为10000的圆上等距分布n个雕塑,求再加入m个雕塑后,为使所有雕塑等距分布所需移动原来n个雕塑的最小总距离. 分析:计算相对距离. #include<cstdio> #incl ...

  5. [java学习笔记]java语言基础概述之运算符&程序流程控制&for循环嵌套

    一.运算符 算数运算符 +,-,*,/,%,++,-- 1.+,-,*,/ 整数除以整数的结果为舍弃了小数部分的整数. 2.%:取余 %左右都为正数,左边小于右边结果为左边值,如,4%5=4 %左边大 ...

  6. ubuntu vim 7.4 编译安装

    作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4137402.html 1.到官网 http://www.vim.org/download.p ...

  7. Java中的类加载器以及Tomcat的类加载机制

    在加载阶段,虚拟机需要完成以下三件事情: 1.通过一个类的全限定名来获取其定义的二进制字节流. 2.将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构. 3.在Java堆中生成一个代表这个类 ...

  8. webpack+react+jquery和jquery插件

    要引入jquery插件 全局引入jquery plugins : [new webpack.ProvidePlugin({ $: 'jquery', jQuery:'jquery' "win ...

  9. spring-cloud-feign案例

    主要依赖 <dependencyManagement> <dependencies> <dependency> <groupId>org.springf ...

  10. 一个汉字的ASCII编码&#12288;

    一个汉字的ASCII编码: