Spring下的@Inject、@Autowired、@Resource注解区别(转)
1、@Inject
- javax.inject
- JSR330 (Dependency Injection for Java)
这是JSR330中的规范,通过AutowiredAnnotationBeanPostProcessor类实现的依赖注入。
@Inject使用
如下是@Inject的使用,不加@Named注解,需要配置与变量名一致即可。
@Inject
@Named("mongo")
private Mongo mongo;
2、@Autowired
- org.springframework.bean.factory
- Spring
@Autowired是Spring提供的注解,通过AutowiredAnnotationBeanPostProcessor类实现的依赖注入,与@inject二者具有可互换性。
@Autowired的使用
@Autowired有个属性为required,可以配置为false,如果配置为false之后,当没有找到相应bean的时候,系统不会抛错。
@Autowired
private MongoTemplate mongoTemplate;
3、@Resource
- javax.annotation
- JSR250 (Common Annotations for Java)
这是JSR250规范的实现,@Resource通过CommonAnnotationBeanPostProcessor类实现依赖注入。
@Resource的使用
@Resource一般会指定一个name属性,如下:
@Resource(name = "userMapper")
private UserMapper userMapper;
4、三个注解的相异之处
@Autowired和@Inject基本是一样的,因为两者都是使用AutowiredAnnotationBeanPostProcessor来处理依赖注入。但是@Resource是个例外,它使用的是CommonAnnotationBeanPostProcessor来处理依赖注入。当然,两者都是BeanPostProcessor。
@Autowired和@Inject
默认autowired by type,可以通过@Qualifier显式指定autowired by qualifier name。
@Resource
默认autowired by field name,如果autowired by field name失败,会退化为autowired by type,可以通过@Qualifier显式指定autowired by qualifier name,如果autowired by qualifier name失败,会退化为autowired by field name。但是这时候如果autowired by field name失败,就不会再退化为autowired by type。
5、总结
个人在使用上,更偏重使用@Inject,这是JSR330规范的实现,而@Autowired是Spring的实现,如果不用Spring一般用不上这个,而@Resource则是JSR250的实现,这是多年前的规范。
参考:
http://blog.csdn.net/u012734441/article/details/51706504(以上内容转自此篇文章)
Spring下的@Inject、@Autowired、@Resource注解区别(转)的更多相关文章
- 【Spring】Autowired原理及与Resource注解区别
Autowired注解 Autowired顾名思义,表示自动注入,如下是Autowired注解的源代码: @Target({ElementType.CONSTRUCTOR, ElementType.M ...
- 关于@Autowired和@Resource注解区别
区分一下@Autowired和@Resource两个注解的区别: 1.@Autowired默认按照byType方式进行bean匹配,@Resource默认按照byName方式进行bean匹配 2.@A ...
- spring autoWire注解和@resource注解区别
1.autoWire注解主要是按类型匹配.因为autowire的扫描机制,是按照接口类型来扫描bean的. 而JSR250 @resource注解是通过名称扫描注入的. @autowire注解的扫描方 ...
- 死磕Spring之IoC篇 - @Autowired 等注解的实现原理
该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读 Spring 版本:5.1. ...
- Spring中静态方法中使用@Resource注解的变量
开发中,有些时候可能会工具类的静态方法,而这个静态方法中又使用到了@Resource注解后的变量.如果要直接使用 Utils.staticMethod(),项目会报异常:如果不直接使用,还要先 new ...
- annotation之@Autowired、@Inject、@Resource三者区别
一.@Autowired 1.@Autowired是spring自带的注解,通过‘AutowiredAnnotationBeanPostProcessor’ 类实现的依赖注入: 2.@Autowire ...
- @Required @Autowired @Resource注解详解
一.@Required注解用于检查特定的属性是否设置 1.RequiredAnnotationBeanPostProcessor 为该注解的处理器,即bean后置处理器,检查所有带有该解的bean属性 ...
- Autowried注解和Resource注解的区别
目录 1.概述 2.Autowried 3.Resource 4.总结 1.概述 在使用Spring框架的过程中, 依赖注入是必须的, 大多时候会使用Autowried注解来进行依赖注入, 但是也可以 ...
- 解决非controller使用,@Autowired或者@Resource注解注入Mapper接口为null的问题
知识点:在service层中注入其它的service接口或者mapper接口都是可以的 但是在封装的Utils工具类中或者非controller普通类中使用@Autowired@Resource注解注 ...
随机推荐
- swift Equatable 函数签名的测试
struct Degoo:Equatable { var lex:String var pex:String static func == (left:Degoo, right:Degoo) -> ...
- centos下升级python
1. wget http://www.python.org/ftp/python/3.3.0/Python-3.3.0.tgz 2.解压之后 tar -xzvf Python-3.3.0.tgz 3 ...
- Python 循环结构语句
1.for循环:计次循环 2.while循环:条件循环 3.嵌套循环 4.跳转语句 一.for循环的使用 1.进行数值循环 利用数值循环输出三次‘你好’: >>> for i in ...
- tree iview treeData json数据 添加 selected 数据 要进行vue.set 进行响应式添加
tree iview treeData json数据 添加 selected 数据 要进行vue.set 进行响应式添加
- PHP21 MVC
学习目标 MVC设计模式 单一入口机制 MVC的实现 MVC设计模式 Model(模型) 是应用程序中用于处理应用程序数据逻辑的部分.通常模型对象负责在数据库中存取数据. View(视图) 是应用程序 ...
- Java垃圾回收之回收算法
问题:谈谈你了解的垃圾回收算法 1.标记-清除算法(Mark and Sweep) 标记:从跟集合进行扫描,对存活的对象进行标记 清除:对堆内存从头到尾进行线性遍历,回收不可达对象内存 优点:简单 缺 ...
- SQL Server查看表的约束
sysobjects是系统自建的表,里面存储了在数据库内创建的每个对象,包括约束.默认值.日志.规则.存储过程等. SELECT * FROM sysobjects WHERE OBJECT_NAME ...
- qemu-img命令
qemu-img是QEMU的磁盘管理工具,在qemu-kvm源码编译后就会默认编译好qemu-img这个二进制文件.qemu-img也是QEMU/KVM使用过程中一个比较重要的工具,本节对其用法和实践 ...
- angular中的http拦截器Interceptors
在angularJs中增加了一个对全局的http请求统一做出处理的api--interceptors Interceptors 有两个处理时机,分别是: 其它程序代码执行 HTTP 请求之后,在实际从 ...
- spring源码深度解析—Spring的整体架构和环境搭建
概述 Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用.Spring是于2003 年兴起的一个轻量级的Java 开发框 ...