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注解注 ...
随机推荐
- 洛谷 P2604 [ZJOI2010]网络扩容
题目描述 给定一张有向图,每条边都有一个容量C和一个扩容费用W.这里扩容费用是指将容量扩大1所需的费用.求: 1. 在不扩容的情况下,1到N的最大流: 2. 将1到N的最大流增加K所需的最小扩容费用. ...
- Python 使用random模块生成随机数
需要先导入 random 模块,然后通过 random 静态对象调用该一些方法. random() 函数中常见的方法如下: # coding: utf-8 # Team : Quality Mana ...
- uva1660 Cable TV Network
点连通度:最少删除几个点使图不连通 拆点就变成了最小割 注意编号.画图就知道u’连v,v’连u. 技巧:不需要枚举S,T.固定S,枚举T即可 这种输入很烦, scanf(" (%d,%d)& ...
- vue render {} 对象 说明文档
Vue学习笔记进阶篇——Render函数 http://www.mamicode.com/info-detail-1906336.html 深入data object参数 有一件事要注意:正如在模板语 ...
- 命令终端执行python
windows进入cmd 1.进入cmd窗口,找到存放py文件的地址(如E:\learn_mock) 2.退出python,输入exit() linux下一样
- 插入insert几种用法
1.insert ignore into 当插入数据时,如出现错误时,如重复数据,将不返回错误,只以警告形式返回.所以使用ignore请确保语句本身没有问题,否则也会被忽略掉.例如: INSERT I ...
- Qt_为什么学习Qt
1)学习GUI编程,市场上任何一款产品几乎都带有图形界面,市场上很火的Androoid.IOS编程无非也是GUI app编程,GUI编程都是差不多的,学习Qt后再学习ANdroid IOS ,那都是S ...
- nginx可用来干什么?
1.静态HTTP服务器 首先,Nginx是一个HTTP服务器,可以将服务器上的静态文件(如HTML.图片)通过HTTP协议展现给客户端. 配置: server { listen80; # 端口号 lo ...
- webpack 之 plugin
loader和plugins的区别是:前者处理单个文件,而后者作用于整个打包过程 内置插件:BannerPlugin 可以在打包后的文件上方添加备注信息,如版权说明等 // webpack.confi ...
- github 获取 token
登录github 地址:https://github.com 点击settings 在点击Developer settings 继续 继续 描述栏随意写 复选框是token的权限 都选上吧 点击红框 ...