发布时间:2026/9/4 7:56:29
Spring IOC 1.什么是IOCIoCInversion of Control控制反转指将对象的创建交给Spring非IOC方式在UserService中依赖UserMapper,public class UserService { private UserMapper userMapper new UserMapper(); public void saveUser() { userMapper.save(); } }这部分代码做了两件事一.实例化对象new UserMapper()二.将新对象赋值给userMapper采用IOC的方式将上面两件事交给Spring来完成。可以简单理解将原来自己控制的对象反转交给Spring控制。2.创建对象Bean在Spring中由Spring创建和管理的对象称为Bean。并存放到Spring Bean容器中用于重复的使用。3.依赖注入(Dependency Injection)spring创建完成对象后再将对象依赖的对象进行注入。Spring可以通过以下三种方式注入构造器注入Service public class UserService { private final UserMapper mapper; public UserService(UserMapper mapper) { this.mapper mapper; } }Setter注入Service public class UserService { private UserMapper userMapper; Autowired public void setUserMapper(UserMapper userMapper) { this.userMapper userMapper; } }字段注入Service public class UserService { Autowired private UserMapper userMapper; }注通过反射进行赋值。上面都使用了Autowired的注解对于构造器注入这个注解可以省略。另外Resource注解也能实现注入的功能。但是它们的功能有一些区别。AutowiredResource来源spring提供Java 官方提供JSR-250 规范Bean查找方式先按类型 (type)再按名称先按名称 (name)再按类型必须注入默认true可以设置为false.Autowired(required true)是通过类型查找时可能会查找到多个同类型的Bean,它们的处理方式也不同Resource:抛异常Autowired:可通过Qualifiername userMapper指定Bean名称或Primary声明对应的Bean为首选Bean至于用谁都可以整个项目应保持统一。4.循环引用问题UserService、OrderService,互相引用。如果通过构造器方式注入将在启动项目时就报错。无法通过三级缓存解决因为在类实例化的时候就需要注入引用的Bean。对于其他方式的注入Srping通过三级缓存来解决循环引用问题。一级缓存singletonObjects已经创建完成可以使用的Bean实例。二级缓存earlySingletonObjects未完成依赖注入的Bean实例还需要注入依赖的对象。三级缓存singletonFactories将未完成依赖注入的Bean包装成ObjectFactory。过程创建userService允许循环依赖则将userService包装成ObjectFactory放入三级缓存。查找引用的orderService未找到则创建。创建orderService允许循环依赖将orderService包装成ObjectFactory放入三级缓存。发现引用了userService发现循环依赖则获取三级缓存中的ObjectFactoryuserService并生成userService放入二级缓存完成orderService 注入userService完成orderService 创建并放入一级缓存清空二级缓存的orderService 。userService从一级缓存查找orderService并注入完成后将userService放入一级缓存清空二级缓存的userService。二级缓存也能解决循环引用为什么要用三级因为Spring需要先实例化对象再创建代理对象。如果有循环依赖时会先将普通类通过ObjectFactory包装放入三级缓存中。其他类在调用ObjectFactory时判断是否生成代理对象。正常的代理类创建是在实例化类完成后在BeanPostProcessorsAfterInitialization,具体可以去了解Bean的创建流程。注Spring Boot 2.6.0 版本开始官方出于引导更优设计的考虑默认禁止了循环依赖如需开启可配置:spring.main.allow-circular-referencestrue

相关新闻

2026/9/4 7:51:28

[论文学习]追踪拒绝动态:SALO越狱检测器

Tracing the Dynamics of Refusal: SALO Jailbreak Detector 论文重点 本文挑战了大语言模型安全研究中关于“拒绝机制”的传统静态认知,通过因果追踪分析发现模型的拒绝行为并非由终端表征(terminal representation)单一决定,而…

2026/9/4 7:51:28

关于二叉树【力扣94.二叉树的中序遍历的思考】

目录 一、本题题目 二、本题代码 三、关键思路 四、注意事项 一、本题题目 二、本题代码 // 方法一:递归法 // 方法二:非递归法 // 方法三:统一迭代法(空指针标记法) 三、关键思路 1、中序遍历:左根右…

2026/9/4 12:17:20

华秋Kicad AI图片生成符号与封装:从建库到PCB全流程实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/4 12:17:20

软件测试效率低的通病:从用例设计到自动化落地的提升思路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/4 12:17:20

C++部署YOLO目标检测:OpenCV DNN与ONNX Runtime完整对比指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/4 12:17:20

纹理技术核心原理与实战:从映射到优化的完整指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/4 12:17:20

MATPOWER本质解析:不是软件而是电力系统建模语言

简介:本资源为MATPOWER 7.0官方开源电力系统分析工具完整安装包,面向电力系统专业师生、科研人员及电网工程师,用于开展潮流计算、静态安全分析、最优潮流调度与动态仿真等核心研究与工程实践。压缩包为ZIP格式,大小30.3MB&#x…

2026/9/4 12:12:19

MATLAB调用Kraken API获取加密货币数据与量化分析实战

简介:本资源是一套面向海洋声学科研人员与MATLAB初/中级使用者的Kraken声场计算轻量级实现,聚焦水下声传播建模中的核心参数——声强K与声压相位phi的数值求解。资源精准解决在MATLAB环境中快速部署Kraken算法、构建声场分析流程的实际需求,适…

2026/9/3 18:28:26

vSound小提琴数字处理器实操指南:从接线到演出的完整配置

电小提琴或者原声小提琴插电演出,第一个绕不开的坎就是声音难听。原声琴的共鸣和空气感一旦进了拾音器,出来的往往是一坨干瘪、发尖、带着奇怪塑料味的信号。我当初第一次把琴接上乐队调音台,直接被主唱吐槽"你这声音像在锯钢丝"。…

2026/9/3 14:29:47

传感器接口IC如何攻克生物化学传感的微弱信号难题?

1. 从电极到比特流:为什么生物化学传感必须依赖专用接口IC 做生物化学传感的人都有过类似的经历:明明传感器本身性能很好,信号输出却一塌糊涂——噪声大、漂移明显、重复性差,怎么调都达不到预期。很多时候问题并不在传感器&#…

2026/9/3 14:30:35

STM32F411CEU6多通道ADC采集:扫描模式+DMA实现详解

1. 多通道 ADC 的用武之地把“Multichannel ADC”和“STM32F411CEU6”这两个关键字放在一起,其实就是嵌入式开发里最常遇到的一类需求:用一块不算贵的 MCU,同时采集多路模拟信号。STM32F411CEU6 是 48 引脚的 Cortex-M4F 主控,主频…

2026/9/4 0:00:58

STM32H743 SPI从机DMA双缓冲通信实战

简介:本资源是面向嵌入式开发工程师与STM32进阶学习者的SPI DMA双机通信从机端完整实现方案,聚焦STM32H743高性能Cortex-M7单片机在工业控制与高速数据交互场景下的从机通信开发痛点。压缩包含1355个文件,主体为599个C源码与321个头文件&…

2026/9/4 0:00:58

CPU开盖降温教程:20元成本让温度直降30度的原理与实践

最近很多朋友都在抱怨,自己的电脑一到夏天就变成"烤箱",玩游戏时CPU温度动不动就飙到90度以上,风扇噪音堪比直升机。更让人头疼的是,明明配置不错,却因为高温降频导致性能大打折扣。如果你也遇到了类似问题&…

2026/9/4 0:00:58

ArkTS 表单工程:场地预约页的三态场次 Grid 与校验

ArkTS 表单工程:场地预约页的三态场次 Grid 与校验 App 14「运动场地预约」场地 Tab(Func1Tab),是整 App 交互最丰富的页面——场地横向切换 三色图例 渐变预约预览卡 快捷模板 今日场次 Grid(可选/已选/已满三态&…

2026/9/3 20:43:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/3 17:51:43

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/3 21:06:57

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…