annotation之@Autowired、@Inject、@Resource三者区别
一、@Autowired
1、@Autowired是spring自带的注解,通过‘AutowiredAnnotationBeanPostProcessor’ 类实现的依赖注入;
2、@Autowired是根据类型进行自动装配的,如果需要按名称进行装配,则需要配合@Qualifier;
3、@Autowired有个属性为required,可以配置为false,如果配置为false之后,当没有找到相应bean的时候,系统不会抛错;
4、@Autowired可以作用在变量、setter方法、构造函数上。
a、将@autowored写在被注入的成员变量上,就不用再xml文件中配置了,在程序中去掉相应的setter和getter方法,
b、还可以写在构造方法上、setter方法上
c、@Qualifier
@Qualifier("XXX") 中的 XX是 Bean 的名称,所以 @Autowired 和 @Qualifier 结合使用时,自动注入的策略就从 byType 转变成 byName 了。
不过需要注意的是@Autowired 可以对成员变量、方法以及构造函数进行注释,而 @Qualifier 的标注对象是成员变量、方法入参、构造函数入参。
二、@Inject
1、@Inject是JSR330 (Dependency Injection for Java)中的规范,需要导入javax.inject.Inject;实现注入。
2、@Inject是根据类型进行自动装配的,如果需要按名称进行装配,则需要配合@Named;
3、@Inject可以作用在变量、setter方法、构造函数上。
a、将@Inject可以作用在变量、setter方法、构造函数上,和@Autowired一样
b、@Named
@Named("XXX") 中的 XX是 Bean 的名称,所以 @Inject和 @Named结合使用时,自动注入的策略就从 byType 转变成 byName 了。
三、@Resource
1、@Resource是JSR250规范的实现,需要导入javax.annotation实现注入。
2、@Resource是根据名称进行自动装配的,一般会指定一个name属性
3、@Resource可以作用在变量、setter方法上。
a、@Resource实例
总结:
1、@Autowired是spring自带的,@Inject是JSR330规范实现的,@Resource是JSR250规范实现的,需要导入不同的包
2、@Autowired、@Inject用法基本一样,不同的是@Autowired有一个request属性
3、@Autowired、@Inject是默认按照类型匹配的,@Resource是按照名称匹配的
4、@Autowired如果需要按照名称匹配需要和@Qualifier一起使用,@Inject和@Name一起使用
最新文章
- Git版本库
- gene框架文档 - 概述
- Java系列:JVM指令详解(上)(zz)
- SDS查看部署在集成TOMCAT服务器中的项目目录结构
- NET垃圾回收机制【Copy By Internet】
- 改进uboot,添加自定义快捷菜单
- [java bug记录] java.util.zip.ZipException: invalid code lengths set
- 丢沙包游戏(或杀人游戏)的C语言实现
- 如何使用 Docker、ECS、Terraform 重建基础架构?
- 准备踏入IT编程的学子们,你们第一门编程语言选谁? Are You Ready? Go!
- Speex Acoustic Echo Cancellation (AEC) 回声消除模块的使用
- sqlserver 清空数据 主键从1开始
- apache Storm 学习笔记
- Docker从零构建php-nginx-alpine镜像
- js for in 获得遍历数组索引和对象属性
- HTTP上传数据 :表单,二进制数据(multipart/form-data application/octet-stream boundary)
- 【转载】 强化学习(三)用动态规划(DP)求解
- scapy学习笔记(3)发送包,SYN及TCP traceroute 扫描
- import tkinter与from tkinter import *的区别
- 不要用for in语句对数组进行遍历
热门文章
- Python学习日志9月13日
- JAVASCRIPT闭包以及原型链
- Latex 分块矩阵的处理
- 解决IllegalBlockSizeException:last block incomplete in decryption异常
- Java中的线程--Lock和Condition实现线程同步通信
- 基于PassThru的NDIS中间层驱动程序扩展
- (25)zabbix事件通知
- python--MySQL 库,表的详细操作
- python 有4个数字1234,能组成多少个互不相同且无重复的三位数数字。
- 数据结构( Pyhon 语言描述 ) — —第9章:列表