广告
返回顶部
首页 > 资讯 > 后端开发 > Python >关于@Autowierd && @Resource 你真的了解吗
  • 480
分享到

关于@Autowierd && @Resource 你真的了解吗

@Autowierd@Resource 2022-11-12 10:11:47 480人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录关于@Autowierd && @Resource 你真的了解吗1.@Autowierd2.@Resource2.1@Resource具体装配顺序,即指定的注入实

关于@Autowierd && @Resource 你真的了解吗

1.@Autowierd

使用byType注入,默认情况下要求依赖必须存在;配置required=false表示依赖可为null

下面代码第一个注入是会报错的,编辑器是会有红色提示。

因为代码中没有这样的bean,截图也能看的出来。


    @Autowired
    private Data data;   //报错
    @Autowired(required = false) //没事
    private Data data2;

找不到报错

2.@Resource

按照ByName自动注入,@Resource有两个重要的属性:nametype,而Spring将@Resource注解的 name属性解析为bean的名字,而type属性则解析为bean的类型。

所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。

如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略。

2.1@Resource具体装配顺序,即指定的注入实例的策略

①如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常。

②如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常。

③如果指定了type,则从上下文中找到类似匹配的唯一bean进行装配,找不到或是找到多个,都会抛出异常。

④如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配(即按照byType的方式)

3.注意

如果是接口或者抽象类的话那么需要实现类唯一,否则创建实例出错,或者说当接口或抽象类有n多个实现类(继承类)时,在注入的必须指定此时要注入的实现类(继承类)。

找到两个实现类,报错!!!

3.1 @Autowierd解决

@Autowierd需要借助@Qualifier来帮助区分使用具体的哪个实现类


    @Autowired
    @Qualifier("userServiceImpl")
    private UserService userService;

3.2 @Resource解决

@Resource 可以使用name属性或者是type属性来指定想要注入的实现类。


    @Resource(name = "userServiceImpl2")
    private UserService userService1;
    @Resource(type = UserServiceImpl.class)
    private UserService userService3;

4.高级用法

@Autowierd 注入抽象类时,当抽象类有多个继承类,可以使用

@Autowierd List<抽象类> ll;//来获取所有的子类实现集合


	@Autowired
    private List<UserService> userServices;

小结:

  • @Autowierd & @Resource 功能相当,都可以注入实例
  • @Autowierd 通过byType的方式注入
  • @Resource 优先使用byName的方式注入,然后使用@Autowire的方式注入

这就是为什么mybatis自动生成的Mapper文件,你使用@Resouce idea不会提示红色下划线(其实在dao文件的已经被扫描了,但是ieda在编辑的时候找不到,但是在运行中是能够找到的)

1.dao层配置

2.mybatis自动生成Mapper文件

3具体情况:一看便知

看着报错,其实不会有错,以为在2中已配置包扫描了。


@Autowired
    private TCommentInfoMapper tCommentInfoMapper;
    
    @Resource
    private TCommentInfoMapper tCommentInfoMapper2;

@Autowire和@Resource注解对比

在我看来@Autowire和@Resource有两个区别:

一、@Resource是J2EE提供的,@Autowire是Spring提供的

二、两个注解使用name区别注入的写法不同

三、然后就没有什么不同了

网上很多人专门介绍@Resource能够用变量名或set方法里的变量名作为对象name来使用,说的好像@Autowire就不能似的.

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: 关于@Autowierd && @Resource 你真的了解吗

本文链接: https://www.lsjlt.com/news/132581.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 关于@Autowierd && @Resource 你真的了解吗
    目录关于@Autowierd && @Resource 你真的了解吗1.@Autowierd2.@Resource2.1@Resource具体装配顺序,即指定的注入实...
    99+
    2022-11-12
    @Autowierd @Resource
  • 关于Java Object你真的了解了吗
    导读: 在平时的coding中hashCode()和equals()的使用的场景有哪些?clone深复制怎么实现?wait()和notify()有什么作用?finalize()方法干嘛的?看似coding中使用的不多,不重要,但是有没有跟我...
    99+
    2023-05-31
    java object ava
  • JavaVolatile关键字你真的了解吗
    目录正文并发编程的三要素1.原子性2.可见性3.有序性VolatileVolatile 的内存模型Volatile 的实现原理(1) lock(2) unclock(3) read(...
    99+
    2022-11-12
    Java关键字 Volatile关键字
  • 你真的了解 PHP 关键字 API 容器吗?
    PHP 是一种广泛使用的服务器端脚本语言,由于其易学易用的特性,它已经成为了众多 Web 开发者的首选语言。而在 PHP 中,有一些关键字,比如 API 和容器,它们在开发中也扮演着非常重要的角色。本文将详细介绍这两个关键字,帮助读者更好地...
    99+
    2023-10-25
    关键字 api 容器
  • 关于Maven的使用,这些你都真的了解么
    Maven使用说明及规范 此文档主要说明Maven的基础使用方式,以及在使用过程过程中需要遵守哪些默认的准则。 我们工作中会经常写maven的配置,但是很多maven使用细节你可能并...
    99+
    2022-11-12
    Maven的使用 使用Maven
  • 你真的了解IP地址吗?
    本文已收录于专栏 ⭐️ 《计算机网络》⭐️ 学习指南: IP协议基本认识分类地址多播地址 无分类地址划分方式子网掩码 IP 分片与重组IPv6基本认识IPv4 首部与 ...
    99+
    2023-09-09
    tcp/ip 网络 服务器 网络协议 ip
  • 你真的需要了解Bash吗?
    Bash是一种强大的命令行解释器,它是Linux和macOS操作系统上的默认Shell。尽管它是如此重要,但很多人并不了解Bash的实际用途。在本文中,我们将探讨Bash的重要性以及它如何帮助我们更好地管理和控制计算机系统。 Bash是什么...
    99+
    2023-08-15
    path bash http
  • java的泛型你真的了解吗
    目录泛型的概述和优势自定义泛型类自定义泛型方法自定义泛型接口泛型通配符、上下限总结泛型的概述和优势 泛型概述 泛型:是JDK5中引入的特性,可以在编译阶段约束操作的数据类型,并进行检...
    99+
    2022-11-13
    java泛型
  • Vue的过滤器你真了解吗
    目录1.过滤器1.1对过滤器的理解1.2全局过滤器:1.3局部过滤器:1.4过滤器的案例总结1. 过滤器 案例中使用到时间格式相关API 1.1 对过滤器的理解 定义:对要显示的数据...
    99+
    2022-11-13
    Vue过滤 Vue过滤器
  • Java 缓存:你真的了解它吗?
    在 Java 开发中,缓存是一个非常重要的概念。它可以大大提升应用程序的性能,减少对底层资源的占用,提高用户体验。但是,你真的了解 Java 缓存吗?本文将为大家介绍 Java 缓存的基本概念、分类、应用场景以及常见的缓存框架。 一、缓存...
    99+
    2023-10-06
    缓存 学习笔记 面试
  • 内网穿透你真的了解吗?
    前言 内网穿透作为程序员常用的调试手段之一,我们可以通过在个人电脑上运行花生壳或者 frp 等方式,让他人访问我们本地启动的服务,而且这种访问可以不受局域网的限制,当我们使用ngrok,frp等开源框架时,你是否有好奇过它神奇的作用?明明没...
    99+
    2023-08-31
    网络穿透 NAT 内网 后端开发 Linux服务器开发
  • C++的运算符你真的了解吗
    目录前言1 算术运算符2 赋值运算符3 比较运算符4 逻辑运算符总结前言 运算符的作用:用于执行代码的运算 主要有: 1 算术运算符 用于处理四则运算 对于前置递增:将递增运算前...
    99+
    2022-11-13
    了解C++ C++运算符
  • Golang中的泛型你真的了解吗
    目录什么是泛型为什么需要泛型泛型语法类型参数类型集类型推断总结Golang 在 1.18 版本更新后引入了泛型,这是一个重要的更新,Gopher 万众瞩目,为 Golang 带来了更...
    99+
    2023-05-20
    Golang泛型用法 Golang泛型学习 Golang泛型 Go 泛型
  • 你真的了解Python、Spring和NumPy接口之间的关系吗?
    Python、Spring和NumPy接口之间的关系 Python、Spring和NumPy是当前最流行的编程语言和框架之一。Python是一种高级编程语言,拥有简单易学、功能强大、灵活性高的特点,被广泛应用于Web开发、数据分析、人工智能...
    99+
    2023-10-20
    spring numy 接口
  • Java和JavaScript的异同,你真的了解吗?
    Java和JavaScript是两种非常常见的编程语言,它们在很多方面有着相似的特性,但它们也有着很多不同之处。在本文中,我们将探讨Java和JavaScript的异同,并且演示一些代码示例来帮助你更好地理解它们。 Java和JavaS...
    99+
    2023-10-24
    javascript http 重定向
  • C++中的函数你真的理解了吗
    目录1 概述2 函数的定义及调用3 值传递4 函数的常见形式5 函数的声明6 函数的分文件编写作用:让代码结构更加清晰1.2.3.4.总结1 概述 作用:将一段经常使用的代码进行封装...
    99+
    2022-11-13
    理解C++ C++函数
  • C++中的数组你真的理解了吗
    目录1 概述2 一维数组2.1 一维数组定义方式2.2 一维数组组名2.3 冒泡排序3 二维数组3.1 二维数组定义方式3.2 二维数组数组名3.3二维数组应用举例总结1 概述 所谓...
    99+
    2022-11-13
    理解C++ C++数组
  • C++的数据类型你真的了解吗
    目录前言1 整型2 sizeof关键字3 实型(浮点型)4 字符型5 转义字符6 字符串型7 布尔类型 bool8 数据的输入总结前言 C++不像python,创建变量的时候必须指定...
    99+
    2022-11-13
    C++数据 C++数据类型
  • python3中的类继承你真的了解吗
    目录(1)首先使用直接继承的方式(2)在子类中定义属性(3)如果想要继承父类中的属性,一般使用super方法:(4)如果需要在子类的__init__中传入参数则可以这样使用:&nbs...
    99+
    2022-11-13
    python类 python继承
  • Python的语法基础你真的了解吗
    目录Python语法基础01-Python快速入门U1-定义变量U2-判断语句U3-循环U4-定义函数U5-面向对象U6-引入python文件02-python的三大优点、七大特色U...
    99+
    2022-11-13
    Python语法 Python基础
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作