依赖注入方式和自动加载原理

news2024/12/23 17:53:35

依赖注入

Spring提供了依赖注入的功能,方便我们管理和使用各种Bean,常见的方式有:

  • 字段注入(@Autowired@Resource
  • 构造函数注入
  • set方法注入

在以往代码中,我们经常利用Spring提供的@Autowired注解来实现依赖注入:

在这里插入图片描述
但是有可能出现空指针异常。
那么给属性加上final修饰,但是@Autowired注解又不能加载final修饰的属性上,直接报红了。
在这里插入图片描述
Spring推荐的是基于构造函数注入,像这样:
在这里插入图片描述
这样做的话,OrderServiceImpl对象构造的时候,就会使用有参构造函数,如果这5个对象有为null就会直接报错,会防止项目中使用这些属性的时候出现空指针。

但是,如果需要注入的属性较多,构造函数就会非常臃肿,代码写起来也比较麻烦。

好在Lombok提供了一个注解@RequiredArgsConstructor,可以帮我们生成构造函数,简化代码:

注意: Lombok 要求 需要注入的对象必须使用 final 修饰

这样一来,不管需要注入的字段再多,我们也只需要一个注解搞定:
在这里插入图片描述

4.1.4 自动加载原理

spring-boot 项目启动时会自动加载所有jar 中的 META-INF/spring.factories文件,也会自动加载别的模块的META-INF/spring.factories文件完成自动配置

在这里插入图片描述

springboot会自动加载META-INF/spring.factories文件里的这些类
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1796550.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言操作UTF-8编码和GBK编码的文件的示例

一、基本介绍 在C语言中,处理文件编码(如UTF-8或GBK)时,需要注意C标准库中的文件操作函数(如fopen, fread, fwrite, fclose等)并不直接支持Unicode或特定字符集的编码。这些函数通常处理字节流&#xff0c…

FreeRTOS基础(十一):消息队列

本文将详细全方位的讲解FreeRTOS的消息队列,其实在FreeRTOS中消息队列的重要性也不言而喻,与FreeRTOS任务调度同等重要,因为后面的各种信号量基本都是基于消息队列的。 目录 一、消息队列的简介 1.1 产生的原因 1.2 消息队列的解决办法 …

防病毒克星——白名单可信系统

白名单作为一种网络安全措施,其核心概念在于限制用户只能访问网络所有者定义的受信任内容。这种机制在保护系统免受恶意软件、病毒等攻击方面发挥着重要作用。然而,关于白名单是否可以防病毒的问题,实际上涉及了多个方面的考虑。 首先&#x…

B=2W,奈奎斯特极限定理详解

一直没搞明白奈奎斯特极限定理的含义,网上搜了很久也没得到答案。最近深思几天后,终于有了点心得。顺便吐槽一下,csdn的提问栏目,有很多人用chatgpt秒回这个事,实在是解决不了问题,有时候人的问题大多数都是…

台式机安装Windows 11和Ubuntu 22双系统引导问题

一、基本情况 1.1、硬件情况 电脑有2个NVMe固态硬盘,1个SATA固态硬盘,1个机械硬盘。其中一个NVMe固态硬盘是Windows系统盘,另一个NVMe固态为Windows软件和文件盘,SATA固态硬盘为Ubuntu专用,机械硬盘为数据备份盘。 …

Java | Leetcode Java题解之第136题只出现一次的数字

题目: 题解: class Solution {public int singleNumber(int[] nums) {int single 0;for (int num : nums) {single ^ num;}return single;} }

Ubuntu下安装和配置Redis

目录 1、更新软件包 2、安装Redis 3、启动 Redis临时服务 4、测试Redis服务 5、配置redis服务 6、Redis服务控制命令 1、更新软件包 执行sudo apt-get update更新软件包 sudo apt-get update2、安装Redis 执行sudo apt-get install redis-server 安装命令 sudo apt i…

CLion配置

下载环境:MinGW-w64 - for 32 and 64 bit Windows - Browse Files at SourceForge.net 解压后找一个位置存放,一般放在和ide同一目录,方便查找 个人习惯配置调整: 项目创建 修改ide解码形式 项目右下角一般默认是utf8 文件编码改…

【C++题解】1074 - 小青蛙回来了

问题:1074 - 小青蛙回来了 类型:需要找规律的循环 题目描述: 关于小青蛙爬井的故事,你应该早就听过了:井深10 尺,小青蛙从井底向上爬,每个白天向上爬 3 尺,每个晚上又滑下来 2 尺&…

kafka安装流程

安装kafka前需要安装zookeeper zookeeper安装教程 1.新建一个logs文件夹 2.修改配置文件 3.修改listeners参数 4.以管理员身份启动kafka服务 .\bin\windows\kafka-server-start.bat .\config\server.properties 如果报 输入行太长。 命令语法不正确。 解决方案如下&#x…

全流程透明双语大语言模型MAP-Neo,4.5T 高质量数据训练

前言 近年来,大语言模型 (LLM) 已经成为人工智能领域最热门的研究方向之一,并在各种任务中展现出前所未有的性能。然而,由于商业利益的驱动,许多最具竞争力的模型,例如 GPT、Gemini 和 Claude,其训练细节和…

codeforces round 949 div2

A Turtle and Piggy Are Playing a Game 题目&#xff1a; 思路&#xff1a;输出2的幂次b使得2^b为最大的不超过x的数 代码&#xff1a; #include <iostream>using namespace std;const int N 2e5 10;void solve() {int l, r;cin >> l >> r;if(r % 2) …

哈希表和二维矩阵的结合-2352. 相等行列对(新思路、新解法)

题目链接及描述 . - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/equal-row-and-column-pairs/description/?envTypest…

制作AI问答机器人的优势和技巧

AI问答机器人已经成为我们生活和工作中的得力助手&#xff0c;应用在社会各个不同的领域中&#xff0c;它们能帮助我们快速获取信息&#xff0c;以提高做事效率&#xff0c;很多企业为了让企业的运营更加高效&#xff0c;为了从众多竞争对手中脱颖而出&#xff0c;纷纷开始制作…

VirtualBox 虚拟机中的 centos7 系统拉取 docker 镜像常见报错及解决方法

一、拉取镜像时报错&#xff1a;Error response from daemon: Get "https://registry-1.docker.io/v2/": tls: failed to verify certificate: x509: certificate signed by unknown authority 原因&#xff1a;&#xff08;文心一言给出的原因&#xff09; 这个错误…

ctfshow web

红包题第二弹 <?phpif(isset($_GET[cmd])){$cmd$_GET[cmd];highlight_file(__FILE__);if(preg_match("/[A-Za-oq-z0-9$]/",$cmd)){die("cerror");}if(preg_match("/\~|\!|\|\#|\%|\^|\&|\*|\(|\)|\&#xff08;|\&#xff09;|\-|\_|\{|\}|\…

JVM运行时数据区 - 程序计数器

运行时数据区 Java虚拟机在执行Java程序的过程中&#xff0c;会把它管理的内存划分成若干个不同的区域&#xff0c;这些区域有各自的用途、创建及销毁时间&#xff0c;有些区域随着虚拟机的启动一直存在&#xff0c;有些区域则随着用户线程的启动和结束而建立和销毁&#xff0…

c#vb代码互转工具

下载地址&#xff1a; https://download.csdn.net/download/wgxds/88979921

【MMU】——MMU 相关的 CP15 寄存器

文章目录 MMU 相关的 CP15 寄存器C1(System Control Register)C2(Translation Table Base Control Register)C3(Domain Access Control Register)C5(Data Fault Status Register)C6(Data Fault Address Register)C9C10MMU 相关的 CP15 寄存器 寄存器作用寄存器 C1 中…

信息系统项目管理师0147:工具与技术(9项目范围管理—9.3规划范围管理—9.3.2工具与技术)

点击查看专栏目录 文章目录 9.3.2 工具与技术 9.3.2 工具与技术 专家判断 规划范围管理过程中&#xff0c;应征求具备如下领域相关专业知识或接受过相关培训的个人或小组 的意见&#xff0c;涉及的领域包括&#xff1a;以往类似项目&#xff1b;特定行业、学科和应用领域的信息…