当前位置: 首页 > news >正文

Spring Framework(DI)

1.依赖注入

  • 思考:向一个类中传递数据的方式有几种?

普通方法(set方法)
构造方法

  • 思考:依赖注入描述了在容器中建立bean与bean之间依赖关系的过程,如果bean运行需要的是数字或字符串呢?

引用类型
简单类型(基本数据类型与String)

  • 依赖注入方式

setter注入
简单类型
引用类型
构造器注入
简单类型
引用类型

2.setter注入

setter注入--引用类型

  • 在bean中定义引用类型属性并提供可访问的set方法

  • 配置中使用property标签ref属性注入引用类型对象

setter注入--简单类型

  • 在bean中定义简单类型属性并提供可访问的set方法

  • 配置中使用property标签value属性注入简单类型数据

3.构造器注入

构造器注入--引用类型(了解)

  • 在bean中定义引用数据类型属性并提供可访问的构造方法

  • 配置中使用constructor-arg标签ref属性注入引用类型对象

构造器注入--简单类型(了解)

  • 在bean中定义简单类型属性并提供可访问的set方法

  • 配置中使用constructor-arg标签value属性注入简单类型数据


依赖注入方式选择
1.强制依赖使用构造器进行,使用setter注入有概率不进行注入导致null对象出现
2.可选依赖使用setter注入进行,灵活性强
3.Spring框架倡导使用构造器,第三方框架内部大多数采用构造器注入的形式进行数据初始化,相对严谨
4.如果有必要可以两者同时使用,使用构造器注入完成强制依赖的注入,使用setter注入完成可选依赖的注入
5.实际开发过程中还要根据实际情况分析,如果受控对象没有提供setter方法就必须使用构造器注入
6.自己开发的模块推荐使用setter注入

4.自动装配

  • IoC容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程称为自动装配
  • 自动装配方式

按类型(常用)
按名称
按构造方法
不启用自动装配

依赖自动装配

  • 配置中使用bean标签autowire属性设置自动装配的类型

依赖自动装配特征

  • 自动装配用于引用类型依赖注入,不能对简单类型进行操作
  • 使用按类型装配时(byType)必须保障容器中相同类型的bean唯一,推荐使用
  • 使用按名称装配时(byName)必须保障容器中具有指定名称的bean,因变量名与配置耦合,不推荐使用
  • 自动装配优先级低于setter注入与构造器注入,同时出现时自动装配配置失效

5.集合注入

  • 注入数组对象

  • 注入List对象(重点)

  • 注入Set对象

  • 注入Map对象(重点)

  • 注入Properties对象

6.加载properties文件

  • 不加载系统属性

  • 加载多个properties文件

  • 加载所有的properties文件

  • 加载properties文件标准格式

  • 从类路径或jar包中搜索并加载properties文件

7.容器

创建容器

  • 方式一:类路径加载配置文件

  • 方式二:文件路径加载配置文件

  • 加载多个配置文件

获取bean

  • 方式一:使用bean名获取

  • 方式二:使用bean名获取并指定类型

  • 方式三:使用bean类型获取

容器类层次结构图

BeanFactory初始化

  • 类路径加载配置文件

  • BeanFactory创建完毕后,所有的bean均为延迟加载

8.核心容器总结

容器相关

  • BeanFactory是IoC容器的顶层接口,初始化BeanFactory对象时,加载的bean延迟加载
  • ApplicationContext接口是Spring容器的核心接口,初始化时bean立即加载
  • ApplicationContext接口提供基础的bean操作相关方法,通过其他接口扩展其功能
  • ApplicationContext接口常用初始化类

ClassPathXmlApplicationContext
FileSystemXmlApplicationContext

bean相关

依赖注入相关

http://www.jsqmd.com/news/816960/

相关文章:

  • C++11(可变参数模板,emplace系列接口)
  • 3分钟掌握React Markdown渲染:告别XSS风险,打造安全高效的文档系统
  • 终极指南:新一代Krkrz引擎XP3资源解包工具 - KrkrzExtract完全解析
  • 小龙虾 OpenClaw Windows 11 安装|2026 一键部署|零代码小白教程
  • 以凰为魂,以标为尺:《凰标》丈量华夏文艺万丈高度@凤凰标志
  • 【Hermes:进阶调优与性能优化】42、Hermes Agent 终端后端深度对比:local/docker/ssh/daytona/modal/singularity,一篇帮你选对沙箱
  • HIV protease substrate VIII;VSQNYPIV
  • AVP算法开发者的PanoSim 5.0实战:如何用Python/C API为自主泊车系统注入“灵魂”?
  • OpenClaw AI助手安全架构:基于信任分层的权限控制与防御实践
  • Linux系统入门:从发行版选择到核心命令与自动化实战
  • 环境配置与基础教程:源码级剖析:使用 torchinfo 与 fvcore 精准打印 YOLO 模型结构、参数与 FLOPs
  • 进程线程协程?一文解决!
  • 你的数字相册管家:用AntiDupl智能清理重复与缺陷图片
  • TVA 与传统工业视觉:技术内核与应用分野(17)
  • AI辅助开发在扫地机机器人技术中的应用
  • 第75篇:Vibe Coding时代:LangGraph 自动选择回归测试实战,解决每次全量测试太慢、局部测试又漏的问题
  • (B站TinyML 教程学习笔记)C15 - 在 Edge Impulse 中训练模型+C16 - 如何评估模型性能+C17 - 欠拟合与过拟合+C18 - 如何使用模型进行推理
  • 如何高效配置OpenDroneMap:5个实战技巧深度解析无人机数据处理方案
  • 三分钟解锁全平台QQ聊天记录:你的数据,你做主!
  • 从开发者视角看taotokenapi调用的整体响应速度与成功率
  • 3个实用技巧让magnetW磁力搜索工具发挥最大价值
  • 前端Web开发(2)
  • 2026年外墙仿石漆服务商哪家好?主流品牌选型参考与行业实力分析 - 产业观察网
  • Postman便携版:无需安装的Windows API测试工具终极指南
  • Topit:3分钟掌握macOS窗口置顶,工作效率提升200%的终极指南
  • ClawShelf开源媒体库:开发者如何用元数据与标签管理数字资产
  • PRD写得再厚,客户为何不买账?给需求绑上业务的救命绳
  • 2026年成都3-6岁少儿英语启蒙机构对比评测:专业性与教学理念深度对比 - 品牌种草官
  • Python自动化管理Synology NAS:Synology API v0.8全面解析
  • Python Redis客户端实战:redis-py深度解析