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

Spring的依赖注入(xml)

引入

首先先明白,依赖注入描述的是在容器中建立bean与bean之间的依赖关系,本质就是将一个类中和别的类解耦的方式,就是把别的类,写在成员变量位置,再对外提供可以给成员变量赋值的方法,外界就直接调用来给对应别的类赋值
![[Pasted image 20250610173017.png]]

所以对应的,依赖注入的方式对应set和构造器分别有四种方式
![[Pasted image 20250610173046.png]]

一、setter注入

首先先创建好一个BookService接口,再创建一个实现类,实现类中重写了 add方法,以及简单类型和引用类型的setter方法。注意:没有对外界提供赋值方法的话无法注入)

public class BookServiceImpl implements BookService {BookDao bookDao;Integer num;@Overridepublic void add() {bookDao.add();System.out.println("this number = "+num);System.out.println("BookService add");}public void setBookDao(BookDao bookDao) {this.bookDao = bookDao;}public void setNum(Integer num) {this.num = num;}
}

此时的xml配置就是,先单独配置 bookDao,然后再配置 bookService,因为里面有两个属性值需要注入,所以里面还需要配置分别的两个标签,一个是引用类型的(使用ref指定),一个是简单类型的(使用value赋值)

<bean id="bookDao" class="com.dongmianmao.dao.impl.BookDaoImpl"/>
<bean id="bookService" class="com.dongmianmao.service.impl.BookServiceImpl"><property name="bookDao" ref="bookDao"/><property name="num" value="123"/>
</bean>

测试类

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");
BookService bookDao = (BookService)applicationContext.getBean("bookService");
bookDao.add();

二、构造器注入

首先先创建好一个BookService接口,再创建一个实现类,实现类中重写了 add方法,以及包含了简单类型和引用类型的构造方法。注意:没有对外界提供赋值方法的话无法注入)

public class BookServiceImpl implements BookService {BookDao bookDao;Integer num;public BookServiceImpl(BookDao bookDao, Integer num) {this.bookDao = bookDao;this.num = num;}@Overridepublic void add() {bookDao.add();System.out.println("this number = "+num);System.out.println("BookService add");}}

此时的xml配置就是,先单独配置 bookDao,然后再配置 bookService,因为里面有两个属性值需要注入,所以里面还需要配置分别的两个标签,一个是引用类型的(使用ref指定),一个是简单类型的(使用value赋值),和使用set构造不同的是,赋值的标签不同,这里使用的是constructor-arg,毕竟用的是构造器赋值嘛,所以标签命名也和构造器有关

<bean id="bookDao" class="com.dongmianmao.dao.impl.BookDaoImpl"/>
<bean id="bookService" class="com.dongmianmao.service.impl.BookServiceImpl"><constructor-arg name="bookDao" ref="bookDao"/><constructor-arg name="num" value="123"/>
</bean><!--或者这样-->
<bean id="bookDao" class="com.dongmianmao.dao.impl.BookDaoImpl"/>
<bean id="bookService" class="com.dongmianmao.service.impl.BookServiceImpl"><constructor-arg type="com.dongmianmao.dao.BookDao" name="bookDao" ref="bookDao"/><constructor-arg index="1" name="num" value="123"/>
</bean>
<!--指定他们的 入参类型type,以及下标索引index,不过写不写值都一样
-->

测试类

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");
BookService bookDao = (BookService)applicationContext.getBean("bookService");
bookDao.add();

三、依赖注入方式选择

![[Pasted image 20250610184406.png]]

http://www.dtcms.com/a/270087.html

相关文章:

  • RISC-V:开源芯浪潮下的技术突围与职业新赛道 (一)为什么RISC-V是颠覆性创新?
  • 安装 asciidoctor-vscode 最新版
  • 针对 SSD 固态硬盘的安全擦除 Secure Erase
  • Kotlin协程中的Job详解
  • 如何用Python编程计算权重?
  • Anolis OS 23 架构支持家族新成员:Anolis OS 23.3 版本及 RISC-V 预览版发布
  • 数据库设计精要:完整性和范式理论
  • 去掉长按遥控器power键后提示关机、飞行模式的弹窗
  • 数据提取之lxml模块与xpath工具
  • 基于Java+SpringBoot 协同过滤算法私人诊所管理系统
  • 系统架构设计师论文分享-论系统安全设计
  • IoTDB:专为物联网场景设计的高性能时序数据库
  • 把word中表格转成excle文件
  • 基于GeoTools的根据Shp文件生成完全包围格网实战
  • Oracle 存储过程、函数与触发器
  • AI标注平台label-studio之二添加机器学习后端模型辅助标注
  • vue3官方文档学习心得
  • SpringCloud系列 - Gateway 网关功能(五)
  • 人体坐姿检测系统开发实战(YOLOv8+PyTorch+可视化)
  • 本地部署 R 语言环境运行软件 RStudio Server 并实现外部访问
  • 玩具语音方案选型决策OTP vs Flash 的成本功耗与灵活性
  • window wsl 环境下编译openharmony,HarmonyOS 三方库 FFmpeg
  • VLLM 调用有哪些超参数; clean_up_tokenization_spaces是什么
  • ubuntu24.04安装NFS网络文件系统/ARM开发板NFS挂载
  • 20250708-03-string结构及命令详解_笔记
  • CI/CD — DevOps概念之实现k8s持续交付持续集成(一)
  • NumPy-统计函数详解
  • UE5内置插件 AnimToTexture 简单入门
  • 一次编码,多端运行:HTML5多终端调用
  • Android 依赖注入框架详解