专栏首页Java技术栈@Resource,@Autowired,@Inject3种注入方式详解

@Resource,@Autowired,@Inject3种注入方式详解

概况

@Resource,@Autowired,@Inject 这3种都是用来注入bean的,它们属于不同的程序中。

ANNOTATION

PACKAGE

SOURCE

@Resource

javax.annotation

Java JSR-250

@Inject

javax.inject

Java JSR-330

@Autowired

org.springframework.bean.factory

Spring 2.5+

JSR是Java Specification Requests的缩写,意思是Java 规范提案。是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准。

区别

@Resource

它有两个关键的属性:name-名称,type-类型

1、如果指定了name,type,则从Spring容器中找一个名称和类型相当应的一个bean,找不到则报错。

2、如果只指定了name,则从Spring容器中找一个名称和name一样的bean,找不到则报错。

3、如果只指定了type,则从Spring容器中找一个类型和type一样的bean,找不到或者找到多个则报错。

4、如果没有指定参数,则默认找字段名称装配,找不到则按类型装配,找不到则报错。

@Autowired

默认按类型装配,找不到或者找到多个则报错。

如果要按名称装配,需要结合Spring另外一个注解Qualifier("name")使用。

默认必须装配requred=true,如果可以为空,可以设置为false,在Spring4+结合jdk8+的情况下还可以使用Optional和false同等的效果,如

@Autowired

private Optional<UserService> userService;

@Inject

和@Autowired类似,可以完全代替@Autowired,但这个没有required属性,要求bean必须存在。

如果要按名称装配,需要结合javax另外一个注解N("name")使用。

本文分享自微信公众号 - Java技术栈(javastack),作者:javastack

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-08-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java程序员必看的 13 本 Java 书籍!

    毕竟,书是学习的海洋呢!So,Java程序员你们准备好了吗?双手奉上Java程序员必读之热门书单。

    Java技术栈
  • 2019 最新 Java 核心技术教程,都在这了!

    以下是Java技术栈微信公众号发布的所有关于 Java 的技术干货,会从以下几个方面汇总,本文会长期更新。

    Java技术栈
  • Java 11 正式发布,这 8 个逆天新特性教你写出更牛逼的代码

    美国时间 09 月 25 日,Oralce 正式发布了 Java 11,这是据 Java 8 以后支持的首个长期版本。

    Java技术栈
  • 有几个JAVA 公众号,想给你推荐下

    作为IT行业的一份子,持续学习技术是必不可少的。而且这个行业也要求我们不断的学习。那么如何在空余时间碎片化学习,并将之掌握呢,今天将这些坚持更新的优质公众号推荐...

    企鹅号小编
  • 一线互联网技术推荐:Java工程师架构知识系统化汇总,面完45K!

    根据高端招聘平台100 offer发布的Java人才盘点报告,在过去的2018年,Java仍然是最流行、招聘供需量最大的技术语言。

    Java知音
  • 3小时Java入门

    最近狂写了一个月的Spark,接手的项目里的代码以Scala语言为主,Java为辅,两种语言混合编码。发现要深入地掌握Scala,很有必要学习一下Java,以便...

    lyhue1991
  • 代码审计|禅道7.3SQL注入复现

    上周的zentaopms漏洞复现你们觉得还OK吗? 斗哥想要的是一个肯定。 如果你们觉得意犹未尽, 本期将进入, 代码审计的小练习。 Zentaopms v7....

    漏斗社区
  • ASP.NET Core ResponseCache进行缓存操作

    本章将介绍客户端缓存将介绍浏览器缓存和服务端缓存,使用浏览器缓存将减少对web服务器的请求次数,同时可以提升性能,避免重复的运算浪费。

    HueiFeng
  • SQLi-Labs环境搭建

    对于想要学习web安全的同学 , 这是一个非常好的学习有关SQL注入的学习资料 类似于闯关的模式 , 每一个关卡都有非常多的思路和利用方式 这些关卡包含了各种常...

    HACK学习
  • Python 中 os.path 模块的

      https://docs.python.org/3/library/os.path.html

    py3study

扫码关注云+社区

领取腾讯云代金券