首页 > 其他分享 >学习Spring,@Autowired的这几个易错点你一定要知道

学习Spring,@Autowired的这几个易错点你一定要知道

时间:2024-12-24 15:55:47浏览次数:6  
标签:易错 依赖 Autowired Spring Bean 注解 异常 标注

前言

1. 你是否懂得@Autowired注解在使用上的细节?
2. 你是否在解决因@Autowired产生的异常而无处下手?
3. 你是否了解@Autowired的基本原理?

我们在做项目的过程中,随着项目规模的增大、第三方服务的引入,项目中类与类之间的依赖关系错综复杂,而@Autowired作为在依赖注入中最常使用到的注解,若没有一定的知识储备,遇到问题就直接百度搜报错信息的话,很大程度会造成一杯茶一包烟,一个bug搞一天

本篇文章我将从以上三个问题出发讲解@Autowired使用中容易出错的地方。

一.@Autowired的使用细节

1.依赖注入:@Autowired它可以对类成员变量方法及构造函数三处地方进行标注。标注在函数上时,@Autowired会自动识别函数上的参数,接着从Spring容器中找到对应的Bean进行依赖注入,同时也可以搭配@Qualifier解决歧义问题。

2.多个匹配的Bean的处理:@Autowired默认按照byType(属性类型)装配方式,如果遇到多个匹配的Bean或者需要根据名称进行装配,可以结合@Qualifier注解来指定要注入的Bean名称。

3.@Autowired的可选性:使用@Autowired(required = false)可以将依赖标记为可选的。如果找不到匹配的Bean,将不会抛出异常,但需要注意处理依赖缺失的情况以防止NPE异常。

4.@Autowired标注的字段的引用:在使用了@Autowired注解的Java中类的初始化顺序为

静态变量->静态初始化块->变量初始化->初始化块->构造器->@Autowired标注的变量赋值

也就是说标注了@Autowired注解的变量要等到类完全加载完才会将相应的bean注入。所以不要在构造器中使用被@Autowired注解标注的变量。

二.@Autowired常见的棘手的异常

以下几种异常是边试我们在使用@Autowired注解中经常遇到的。

  1. BeanCreationException:Bean创建失败

这种问题可能是由于Bean的构造函数抛出异常、初始化失败等原因引起的。

  1. UnsatisfiedDependencyException:存在多个匹配的Bean

    在我们日常使用Springboot开发中此情况常见于一个service接口有多个实现类,因为@Autowired注解进行依赖注入时是默认按属性类型的,此时对该service进行依赖注入时,容器中出现多个类型相同bean(因为它有多个实现类),容器不知道为它注入哪个,只能走抛异常的方式。

运行结果:

  1. NoSuchBeanDefinitionException

当Spring容器无法找到与@Autowired注解所需类型匹配的Bean时,就会抛出NoSuchBeanDefinitionException异常。

  1. BeanCurrentlyInCreationException:循环依赖问题

使用@Autowired时,如果存在循环依赖(A依赖B,B又依赖A),会导致BeanCurrentlyInCreationException异常。

运行结果:

5.NullPointException:空指针异常

没错,NullPointException也是使用Autowired常常碰到的异常。这种异常经常出现在依赖未注入而导致的。@Autowired的使用细节目录中提到的1,2,4都有可能导致。

三.@Autowired底层简述

在Spring中有着一个后处理器的概念,每一个后处理器都有着解析一种或者多种注解的功能。@Autowired正是由AutowiredAnnotationBeanPostProcessor进行解析的。它的流程分为两步,第一:找到类中@Autowired标注的的属性或者函数;第二:到容器去找到对应类型的bean去注入

这个方法具体在AutowiredAnnotationBeanPostProcessor的258行

接着我们做个测试,进行debug

这是用到的类,这里的UserMapper故意没标注@Mapper注解,模拟出错情况。

蓝色那一行,底层根据beanName:“userServiceImpl”到缓存中找到类的元数据,

返回的元数据中有userServiceImpl中用@Autowired标注的属性“userMapper”

接着进行一个数据校验(非空判断)

最终来到依赖注入阶段

发现容器中并没有匹配的bean(前面故意没在mapper接口上加mapper注解),执行报异常的操作

以防上图看的不清楚

标签:易错,依赖,Autowired,Spring,Bean,注解,异常,标注
From: https://blog.csdn.net/qq_66627105/article/details/144509066

相关文章

  • 基于springboot的国医大师医案推荐网站
    文章目录详细视频演示项目介绍技术介绍功能介绍核心代码系统效果图详细视频演示文章底部名片,获取项目的完整演示视频,免费解答技术疑问项目介绍  SpringBoot国医大师医案推荐网站,是以传承和弘扬中医药文化、助力中医临床学习与研究为宗旨搭建的专业知识平台。......
  • springboot毕业设计题目管理系统-计算机设计毕业源码92342
    目 录摘要1绪论1.1研究背景1.2目的及意义1.3论文结构与章节安排2 毕业设计题目管理系统设计分析2.1可行性分析2.1.1技术可行性分析2.1.2 经济可行性分析2.1.3法律可行性分析2.2系统功能分析2.2.1功能性分析2.2.2非功能性分析2.3 系统......
  • SpringCloud微服务(九)
    前言:此篇文章系本人学习过程中记录下来的笔记,里面难免会有不少欠缺的地方,诚心期待大家多多给予指教。 往期目录回顾: SpringCloud微服务(一)SpringCloud微服务(二)SpringCloud微服务(三)SpringCloud微服务(四)SpringCloud微服务(五)SpringCloud微服务(六)SpringCloud微服务(七)SpringClo......
  • 基于 Spring Boot、MyBatis Plus、MySQL、HTML、CSS、JavaScript、Vue.js、Redis 与 S
    1.项目概述1.1项目目标为学生提供个性化课程推荐,助力高效选课。构建师生交流社区,促进课程相关交流。实现课程与用户信息的高效管理。1.2功能概述用户管理:包括注册、登录、信息修改、角色管理。课程管理:课程发布、查询、修改、删除、选课操作、评价与推荐。交流社区:课......
  • 【SpringCloud】5.Micromete——分布式链路追踪
    必要性:由客户端发起的请求会形成链路,任何一环出现问题,可能导致失败。我们需要快速的观测、定位和解决问题。概述ZipKinMicromete+ZipKin搭建链路控制案例概述为什么需要分布式链路技术在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用来......
  • SpringCloud概述
    目录微服务单机架构集群和分布式架构集群和分布式的概念集群和分布式的区别和联系 微服务架构分布式架构和微服务架构微服务的优缺点优点缺点SpringCloud官方介绍注意SpringCloud版本SpringCloud和SpringBoot的关系SpringCloud实现方案SpringCloudNetflix......
  • 基于springboot的智慧社区管理系统-毕业设计源码06797
    摘 要SpringBoot智慧社区管理系统是一款基于SpringBoot框架开发的智能化社区管理软件,致力于提升社区管理效率和服务质量。该系统涵盖了社区入住管理、物业费管理、公共设施预约等功能,支持在线报修、信息发布、社区活动管理等多种服务。借助智能化技术,系统能够实现对社区数据......
  • 免费送源码:Java+SpringBoot+MySQL SpringBoot会务管理系统 计算机毕业设计原创定制
    SpringBoot会务管理系统摘 要随着计算机技术的发展,特别是计算机网络技术与数据库技术的发展,使用人们的生活与工作方式发生了很大的改观。本课题研究的会务管理系统,主要功能模块包括用户管理,会议信息,会议签到,请假管理,评分记录,听会感受,意见箱等,采取面对对象的开发模式进行......
  • 计算机毕业设计原创定制(免费送源码):Java+ssm+Springboot Springboot手办定制销售系统
      摘要随着人们生活水平的提高和互联网的发展,人们消费思想和消费方式的逐渐改变,使得消费者开始追求自身品味和个性。手办定制就是在这种条件下应运而生。手办定制是基于客户需求来定制产品,满足客户对其功能、结构、外形等的需求,最终获得极具特色的产品。手办定制使消费者不......
  • Springboot进口零食销售网站74r3o(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,零食信息,类型开题报告内容研究背景随着互联网技术的飞速发展和消费者购物习惯的深刻变革,电子商务已成为推动全球经济增长的重要力量。进口零食作为日常消......