Spring IOC

发布时间:2026/11/5 12:16:00

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/11/4 7:02:22

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

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

2026/11/3 2:10:07

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

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

2026/11/5 12:14:29

Stimulsoft Reports 2019.2.2 落地指南:老系统兼容与版本陷阱规避

简介:Stimulsoft Reports 2019.2.2 是一款面向.NET开发者的专业报表控件,适用于WinForms、ASP.NET及WPF平台,帮助开发者快速构建数据可视化报表与打印输出功能,尤其适合中高级C#工程师在企业级管理系统、BI看板或财务报表模块中集…

2026/11/5 12:14:29

H110/B250主板BIOS魔改:CPU微码、ME与刷写校验全流程

简介:面向希望为 B150、B250、H110 等老主板扩展 Intel 8/9 代 CPU 兼容性的 DIY 玩家与装机爱好者,这份 BIOS 魔改工具包提供了一套较完整的固件修改辅助材料,适合具备一定硬件基础、了解刷写风险的用户在做好备份与稳定供电的前提下研究使用…

2026/11/5 12:14:29

GD32E10x官方例程入门:从点灯到外设调试全流程

简介:这份GD32E10x系列官方例程面向使用兆易创新GD32E10x系列MCU的嵌入式开发者与初学者,基于ARM Cortex-M3内核,集合了从基础外设到通信、电机控制等场景的示例代码,可用于快速理解芯片用法并搭建工程。压缩包共935个文件&#x…

2026/11/5 12:09:24

潍坊高纯氢氧化镁生产厂家怎么选:泽隆新材料靠谱商家测评排名

潍坊高纯氢氧化镁怎么选不踩坑:从产能、品控到定制能力,一篇讲透靠谱厂家的判断标准采购高纯氢氧化镁、阻燃级氢氧化镁,最怕的不是价格高,而是批次不稳、指标浮动、交期失控。尤其是做线缆料、橡胶制品、阻燃母粒的企业&#xff0…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

2026/11/5 0:02:07

多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中…

2026/11/5 0:02:07

大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#…

2026/11/5 0:02:07

鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑