@Autowired和@Resouce的区【转】

@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。

1、共同点

两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。

2、不同点

(1)@Autowired

@Autowired是Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired;只按照byType注入。

@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。如下:

public class TestServiceImpl {

  @Autowired

  @Qualifier("userService")

  private UserService userService;

}

@Resource

@Resource默认按照ByName自动注入,由J2EE提供,需要导入包javax.annotation.Resource。@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。

@Autowired功能虽说非常强大,但是也有些不足之处。比如:比如它跟spring强耦合了,如果换成了JFinal等其他框架,功能就会失效。而@Resource是JSR-250提供的,它是Java标准,绝大部分框架都支持。

除此之外,有些场景使用@Autowired无法满足的要求,改成@Resource却能解决问题。接下来,我们重点看看@Autowired和@Resource的区别。

@Autowired默认按byType自动装配,而@Resource默认byName自动装配。
@Autowired只包含一个参数:required,表示是否开启自动准入,默认是true。而@Resource包含七个参数,其中最重要的两个参数是:name 和 type。
@Autowired如果要使用byName,需要使用@Qualifier一起配合。而@Resource如果指定了name,则用byName自动装配,如果指定了type,则用byType自动装配。
@Autowired能够用在:构造器、方法、参数、成员变量和注解上,而@Resource能用在:类、成员变量和方法上。
@Autowired是spring定义的注解,而@Resource是JSR-250定义的注解。
此外,它们的装配顺序不同,还有就是在idea中 对@Autowired注解无法去识别到bean对象,提示波浪线警告,@Resource可以避免。

图解@Autowired的装配顺序

@Autowired和@Resouce的区【转】

@Resource的装配顺序如下:

如果同时指定了name和type:

@Autowired和@Resouce的区【转】

如果指定了name:

@Autowired和@Resouce的区【转】

如果指定了type:

@Autowired和@Resouce的区【转】

如果既没有指定name,也没有指定type:

@Autowired和@Resouce的区【转】

Original: https://www.cnblogs.com/xiao-yuan/p/16561586.html
Author: 小源博客
Title: @Autowired和@Resouce的区【转】

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/593851/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • FreeMarker 去掉循环末尾的符号

    在使用 FreeMarker 模板引擎来生成文件时,经常会使用到 list 标签用于循环生成。 有时会遇到需要处理末尾符号的情况,比如 Json 文件,循环生成的标签中末尾是不需要…

    Java 2023年6月6日
    079
  • MyBatis的执行流程分析

    核心流程介绍 我们都知道 MyBatis 是对 JDBC 的封装,不管怎样,JDBC 的那一套还是不会变的,只是做了抽象、封装、归类等;所以我们顺着 JDBC 的思路来说下 MyB…

    Java 2023年6月5日
    082
  • JAVA入门基础_从零开始的培训_Git入门使用

    Git概述及下载安装 集中式版本控制与分布式版本控制概述 Git下载与安装 Git常用命令 Git所覆盖的区域 全局用户名和邮箱、仓库状态、初始化、添加删除暂存区、提交到本地库、查…

    Java 2023年6月9日
    0115
  • 一个基于SpringBoot + IView 的单体架构管理系统

    前言 项目基于Springboot + IView 技术构建 ,在超级工具箱的基础上做了减法,去除了一些附加影响启动的模块,变成了一个相当纯洁的后台管理系统,仅仅依赖 Redis …

    Java 2023年5月30日
    096
  • 基于 openssl 及 keytool 创建 ssl 证书并配置到 nginx 和 tomcat

    1、openssl 创建 crt 证书示例 2、nginx 配置 crt 证书示例 3、keytool 创建 keystore 证书示例 如需添加 SAN 信息则 通过 -ext …

    Java 2023年5月30日
    070
  • Netty源码研究笔记(4)——EventLoop系列

    EventLoop,即事件驱动,它是Netty的I/O模型的抽象,负责处理I/O事件、任务。 不同的EventLoop代表着不同的I/O模型,最重要、最主要的是NioEventLo…

    Java 2023年6月10日
    075
  • java基础4.20

    1.是否可以从一个static方法内部发出对非static方法的调用?不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而st…

    Java 2023年6月5日
    049
  • SSM 集成 Freemarker 模板引擎

    在前后端分离的大趋势下,项目开发过程中,应尽量减少前端和后台的依赖和耦合,前端和后台尽可能采用 ajax 进行交互;但是全站 ajax,不利于网站 SEO,所以引入模板引擎,尽量减…

    Java 2023年6月5日
    083
  • LeetCode剑指Offer刷题总结(一)

    LeetCode过程中值得反思的细节 以下题号均指LeetCode剑指offer题库中的题号 本文章将每周定期更新,当内容达到10题左右时将会开下一节。 二维数组越界问题04 pu…

    Java 2023年6月7日
    075
  • 用emacs org-mode写cnblogs博客(续)

    3 发文中的博客代码格式背景的问题 在书写博客时,可以使用org自带的 {#+BEGIN_CENTER #+END_CENTER}功能调整文字,图片居中。使用{#+BEGIN_SR…

    Java 2023年6月7日
    0125
  • 异步任务-springboot

    异步:异步与同步相对,当一个异步过程调用发出后,调用者在没有得到结果之前,就可以继续执行后续操作。也就是说无论异步方法执行代码需要多长时间,跟主线程没有任何影响,主线程可以继续向下…

    Java 2023年6月13日
    077
  • 编程入门之日志聚合系统

    (关心具体部署的同学,可以移步我的另外一篇《Centos部署Loki日志聚合系统 》https://www.cnblogs.com/uncleguo/p/15975647.html…

    Java 2023年6月15日
    070
  • JAVAWEB开发之JSTL标签库的使用、 自己定义EL函数、自己定义标签(带属性的、带标签体的)

    JSTL JSTL简单介绍: JSTL的全称:JSP Standard Tag Library,JSP标准标签库 JSTL的作用: 提供给Java Web开发者一个标准通用的标签函…

    Java 2023年5月29日
    077
  • 前端——JS

    JS面试题 基本数据类型 Number、String、Boolean、Null、Undefined、Symbol、bigInt 引用数据类型 object、Array、Date、F…

    Java 2023年6月5日
    078
  • LeetCode.1189-balloon实例数最大值(Maximum Number of Balloons)

    这是小川的第416次更新,第449篇原创 看题和准备 今天介绍的是 LeetCode算法题中 Easy级别的第 267题(顺位题号是 1189)。给定一个字符串文本,使用文本字符来…

    Java 2023年6月5日
    076
  • 题目: 给定一个数组,在数组下标为2的位置上添加一个元素

    package com.gao.test; /* 题目: 给定一个数组,在数组下标为2的位置上添加一个元素 */ public class TestDemo09 { public …

    Java 2023年6月5日
    080
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球