1.概述

在使用Spring框架的过程中, 依赖注入是必须的, 大多时候会使用Autowried注解来进行依赖注入, 但是也可以使用Resource注解来实现注入.

那么两个注解有什么区别呢? 它们又是如何使用的呢?

2.Autowried

用来装配bean, 可作用于字段上, 也可以作用于setter方法上.

是Spring的注解.

默认情况下要求对象必须存在, 它要求依赖对象必须存在. 若允许null值, 可以设置它的required为false.

默认按照类型进行装配注入. 如果想按照名称进行装配的话, 需要与Qualifer注解搭配使用.

@Autowried
@Qualifier("admin")
private AdminDAO adminDAO;

3.Resource

用来装配bean, 可作用于字段上, 也可以作用于setter方法上.

是J2EE的注解.

默认按照名称来装配注入, 只有找不到与名称匹配的bean才会按照类型来注入.

它有两个属性是比较重要的:

  • name: Spring将name的属性值解析为bean的名称, 使用byName的自动注入策略
  • type: Spring将type的属性值解析为bean的类型, 使用byType的自动注入策略

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

Resource注解的装配顺序

  • 如果同时指定了name属性和type属性, 那么Spring将从容器中找唯一匹配的bean进行装配, 找不到则抛出异常
  • 如果指定了name属性值, 则从容器中查找名称匹配的bean进行装配, 找不到则抛出异常
  • 如果指定了type属性值, 则从容器中查找类型匹配的唯一的bean进行装配, 找不到或者找到多个都会抛出异常
  • 如果都不指定, 则会自动按照byName方式进行装配, 如果没有匹配, 则回退一个原始类型进行匹配, 如果匹配则自动装配

4.总结

Resource注解是J2EE提供的, 而Autowried注解是Spring提供的, 如果想减少对Spring的依赖建议使用Resource注解.

其实也没必要, Spring框架目前大部分应用都使用着, 使用Spring的注解也没什么不好.

不过我个人喜欢使用Resource注解.

Autowried注解和Resource注解的区别的更多相关文章

  1. Spring中@Autowired注解、@Resource注解的区别 (zz)

    Spring中@Autowired注解.@Resource注解的区别 Spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource.@ ...

  2. Spring中@Autowired注解、@Resource注解的区别

    Spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource.@PostConstruct以及@PreDestroy. @Resour ...

  3. 转:Spring中@Autowired注解、@Resource注解的区别

    Pay attention: When using these annotations, the object itself has to be created by Spring context. ...

  4. @Resource或者@Autowired作用/Spring中@Autowired注解、@Resource注解的区别

    @Resource或者@Autowired作用不用写set get就能注入,当然,前提是你已经开启了注解功能. spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定 ...

  5. @Autowired注解与@Resource注解的区别与用法

    Spring不但支持自己定义的@Autowired注解,还支持JSR-250规范定义的几个注解.如:@Resource.@PostConstruct及@PreDestroy 1. @Autowired ...

  6. spring--Springmvc中@Autowired注解与@Resource注解的区别

    Spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource.@PostConstruct以及@PreDestroy. @Resour ...

  7. @Autowired注解与@Resource注解的区别(详细)

    相信对现在Java码农来说,@Autowired跟@Resource并不陌生,二者都可以自动注入,但是两者的区别很多时候并没有被注意到. 一.注解的出处 @Autowired是Spring提供的注解, ...

  8. Spring中 @Autowired注解与@Resource注解的区别

    Spring中 @Autowired注解与@Resource注解的区别在Spring 3.X中经常使用到@Autowired和@Resource进行装配.这两个注解的差异在何处???相同点:@Reso ...

  9. spring autoWire注解和@resource注解区别

    1.autoWire注解主要是按类型匹配.因为autowire的扫描机制,是按照接口类型来扫描bean的. 而JSR250 @resource注解是通过名称扫描注入的. @autowire注解的扫描方 ...

随机推荐

  1. linux下目录简介——/SElinux

    一.前言 安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统. SELinux 主要由美国 ...

  2. Python之 操作 MySQL 数据库

    什么是MySQLdb? MySQLdb 是用于Python链接Mysql数据库的接口,它实现了 Python 数据库 API 规范 V2.0,基于 MySQL C API 上建立的. 安装 Pytho ...

  3. 3、Linux连接oracle

    su - oracle //登录sqlplus sqlplus /nolog //连接orcale conn xx/xx;(用户名/密码)  或者 connect /as sysdba;

  4. source-insight 常用操作

    [Ctrl + ] 跳转到函数.宏.变量 等定义处. [Alt  > ] 跳转到最近光标停留位置. [Alt  < ] 跳转到上次近光标停留位置. [Ctrl Shift [ ] 块位置开 ...

  5. python简明教程代码

    #!user/bin/env python #-*- coding:utf-8 -*- # code001 print('hello world') (only one quotation mark, ...

  6. MySQL死锁分析一例

    Tomcat日志报死锁错误,show innodb status获取死锁信息: ------------------------ LATEST DETECTED DEADLOCK ---------- ...

  7. 工控随笔_14_西门子_Step7项目:打开项目不可用解决方法

    由于计算机系统区域和语言的设置,以及Step建立项目时的不同设置,有时候利用Step7打开项目时 会遇到如下情况:   项目不可用. 具体如下图所示: 图 step 7 打开时项目不可用 一.Step ...

  8. 读完这一篇,字符串格式化界的“白富美”(f-strings)抱回家!

    f-strings 从Python 3.6开始,新引入了一种字符串格式化方法,称为“格式化字符串常量”(formatted string literal),简称f-strings.相比于%.str.f ...

  9. JNDI是什么

    参考文章:---为什么 追本溯源 http://www.cnblogs.com/xx0405/p/5332198.html jndi在Spring和tomcat下的使用: https://www.cn ...

  10. 2018-2019-2 20165312《网络攻防技术》Exp1 PC平台逆向破解

    2018-2019-2 20165312<网络攻防技术>Exp1 PC平台逆向破解 一.Exp1.1 直接修改程序机器指令,改变程序执行流程 知识要求:Call指令,EIP寄存器,指令跳转 ...