使用XML配置依赖注入

1. 属性赋值的方式

在我们手动需要给一个类的实例对象属性赋值时,可以采用以下方法:

  • 使用有参构造函数,在建立实例对象时就进行赋值
  • 使用属性的set方法

同理,IOC依赖注入也有以上几种情况,这里分别对调用有参构造函数、set方法两种情况的XML配置文件书写方式进行了总结。

2. 组件类

假如目前存在以下两个类,可以看到两个类存在依赖关系,UserService 中有UserDao 类型的属性。

public class UserDao {
}
public class UserService {private UserDao userDao;private int age;private String name;public UserService(int age , String name ,UserDao userDao) {this.userDao = userDao;this.age = age;this.name = name;}public getAge() {return this.age;}public getName() {return this.name;}public getUserDao() {return this.userDao;}public setAge(int age) {this.age = age;}public setName(String name) {this.name = name;}public setUserDao(UserDao userDao) {this.userDao = userDao;}
}

接下来我们就要通过IOC,实现自动创建UserService 的实例对象,并对其属性赋值。

3.基于构造函数的依赖注入

3.1 按照相应构造函数的顺序注入数据

XML配置文件如下:

	<!-- 步骤1: 将他们都存放在ioc容器 --><bean id="userDao" class="org.kkk.ioc.UserDao" /><!-- 2.多个构造参数注入  --><bean id="userService" class="org.kkk.ioc.UserService"><constructor-arg value="18"/><constructor-arg value="张三"/><constructor-arg ref="userDao"/></bean>

注意:

  • constructor-arg:表示使用有参构造函数,value直接注入基本类型值,ref引用其他bean id
  • 在此情况下,三个属性的值要与有参构造函数中参数的顺序相同
  • IOC容器有缓冲动作,会创建完对象之后再进行属性赋值,因此bean的声明顺序没有限制

3.2 按照构造参数的名称注入数据

XML配置文件如下:

	<!-- 步骤1: 将他们都存放在ioc容器 --><bean id="userDao" class="org.kkk.ioc.UserDao" /><!-- 2.多个构造参数注入  --><bean id="userService" class="org.kkk.ioc.UserService"><constructor-arg name="name" value="张三"/><constructor-arg name="age" value="18"/><constructor-arg name="userDao" ref="userDao"/></bean>

注意:

  • constructor-arg中name的值为构造参数的名称
  • 在此情况下,IOC会根据名称进行赋值,不用考虑顺序

3.3 按照构造参数的下角标注入数据

XML配置文件如下:

	<!-- 步骤1: 将他们都存放在ioc容器 --><bean id="userDao" class="org.kkk.ioc.UserDao" /><!-- 2.多个构造参数注入  --><bean id="userService" class="org.kkk.ioc.UserService"><constructor-arg index="1" value="二狗子"/><constructor-arg index="0" value="18"/><constructor-arg index="2" ref="userDao"/></bean>

注意:

  • index表示构造参数的位置,从左到右,从0开始(与数组类似)
  • 此方法通常不使用

4. 基于set方法的依赖注入

XML配置文件如下:

	<!-- 步骤1: 将他们都存放在ioc容器 --><bean id="userDao" class="org.kkk.ioc.UserDao" /><!-- 2.多个构造参数注入  --><bean id="userService" class="org.kkk.ioc.UserService"><property name="name" value="张三" /><property name="age" ref="18" /><property name="userDao" ref="userDao" /></bean>

注意:

  • property标签: 可以给setter方法对应的属性赋值
  • property 标签: ref代表引用bean的标识id、value属性代表基本属性值
  • name属性应该等于set方法去掉set后首字母小写的值,并不是属性的值。只是一般情况下两者相同。

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

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

相关文章

【力扣刷题练习】42. 接雨水

题目描述&#xff1a; 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 题目解答&#xff1a; class Solution {public int trap(int[] height) {int n height.length;int ans 0;if (n < 3)return…

【C语言】C语言编程实战:Base64编解码算法从理论到实现(文末附完整代码)

文章目录 1. 概述2. 原理2.1 Base64编码表2.2 Base64编码步骤2.3 Base64解码步骤 3. 核心代码解读4. 完整代码下载5. 总结 1. 概述 Base64算法是一种基于64个字符的编码算法&#xff0c;常用于在通常处理文本数据的场合&#xff0c;表示、传输、存储一些二进制数据。该算法使用…

关于 selinux 规则

1. 查看selinux状态 SELinux的状态&#xff1a; enforcing&#xff1a;强制&#xff0c;每个受限的进程都必然受限 permissive&#xff1a;允许&#xff0c;每个受限的进程违规操作不会被禁止&#xff0c;但会被记录于审计日志 disabled&#xff1a;禁用 相关命令&#xf…

2024 年如何复用 ChatGPT 从头开始​​快速学习 Python

今天聊聊计算机专业的学习以及一个升级打怪路线。 有需自取 计算机必看经典书单和课程资源(含下载方式) 随着 Chat GPT 等聊天机器人的兴起&#xff0c;许多人想知道人工智能助手是不是可以做编程老师。在这篇文章里&#xff0c;我会分享作为一个完全的小白如何用 ChatGPT 学…

flutter_gen依赖

flutter_gen 5.4.0 flutter项目内终端&#xff1a; dart pub global activate flutter_gen export PATH“ P A T H " : " PATH":" PATH":"HOME/.pub-cache/bin” fluttergen

薪资18K需要什么水平?来看看97年测试工程师的面试全过程…

我的情况 大概介绍一下个人情况&#xff0c;男&#xff0c;本科&#xff0c;三年多测试工作经验&#xff0c;懂python&#xff0c;会写脚本&#xff0c;会selenium&#xff0c;会性能&#xff0c;然而到今天都没有收到一份offer&#xff01;从年后就开始准备简历&#xff0c;年…

iOS OC与Swift文件相互调用

在OC工程中接入纯swift二方库时二方库开发者提供了swift开发代码示例&#xff0c;因此如何在本项目的OC工程中引入swift文件并引用成为了现在面临的一个问题。&#xff08;本博客未记录OC工程引入swift打包编译阶段需修改的内容&#xff09; 1. OC工程中引入swift文件并调用 …

C++从零开始的打怪升级之路(day38)

这是关于一个普通双非本科大一学生的C的学习记录贴 在此前&#xff0c;我学了一点点C语言还有简单的数据结构&#xff0c;如果有小伙伴想和我一起学习的&#xff0c;可以私信我交流分享学习资料 那么开启正题 今天分享的是关于适配器了解以及一些简单适配器实现 1.容器适配…

python基础——基础语法

文章目录 一、基础知识1、字面量2、常用值类型3、注释4、输入输出5、数据类型转换6、其他 二、字符串拓展1、字符串定义2、字符串拼接3、字符串格式化4、格式化精度控制 三、条件/循环语句1、if2、while3、for循环 四、函数1、函数定义2、函数说明文档3、global关键字 五、数据…

Docker Register 搭建私有镜像仓库

1 安装 docker (1)更新软件源 sudo apt update (2)安装 docker 组件 sudo apt install docker.io (3)启动 docker 服务 sudo systemctl start docker (4)设置 docker 服务开机自启动 sudo systemctl enable docker (5)验证 docker 功能 sudo docker contai…

代码随想录 回溯算法-组合

目录 77.组合 216.组合总和||| 17.电话号码的字母组合 39.组合总和 40.组合总和|| 77.组合 77. 组合 中等 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;n 4…

【论文精读】大语言模型融合知识图谱的问答系统研究

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

一文看懂 | 机器视觉前景

机器视觉概述&#xff1a;机器视觉是人工智能发展中的一个重要分支&#xff0c;其主要目标是用机器替代人眼进行测量和判断。 机器视觉系统通过图像摄取装置将目标转换成图像信号&#xff0c;然后传送给专用的图像处理系统&#xff0c;最终得到目标的形态信息。 全球机器视觉…

链路负载均衡之策略路由

一、策略路由的概念 一般来说&#xff0c;防火墙是根据目的地址查看路由&#xff0c;这种情况下只能根据报文的目的地址为用户提供服务&#xff0c;没办法更加灵活对内网用户进行区分&#xff0c;让不同用户流量走不同的链路转发&#xff0c;如根据源地址、应用协议等区分流量…

照片 200K 的尺寸是多大?如何调整照片到200k?

在数字时代&#xff0c;我们经常需要在互联网上上传和分享照片。在上传照片时&#xff0c;我们常常会遇到文件大小的限制&#xff0c;通常以“K”&#xff08;千字节&#xff09;为单位。如果您需要上传的照片大小为 200K&#xff0c;那么它的实际尺寸是多大呢&#xff1f;本文…

卫星通信基础知识

为了满足日益增长的卫星业务需求&#xff0c;多路径路由被用来通过多个传输路径并发地传输每个流。然而&#xff0c;动态变化的卫星拓扑结构带来了挑战&#xff0c;多路径路由规划和不同路径之间的业务分裂。 因此&#xff0c;在本文中&#xff0c;我们提出了一个GNN启用多路径…

栈【stack】 栈的【STL】运用 【单调栈】 【单调栈】的详细解释【图文讲解】 洛谷P5788 【模板】单调栈 【单调队列】

文章目录 栈的定义栈的STL运用 单调栈 & 单调队列单调栈的详细解释【图文讲解】例题&#xff1a;洛谷P5788 【模板】单调栈code↓洛谷P5788 【模板】单调栈 AC 栈的定义 栈的修改与访问是按照后进先出的原则进行的 栈通常被称为是后进先出&#xff08;last in first out&…

centos ps命令

1. ps &#xff1a; Process Status的缩写&#xff0c;用于查询系统的进程状态 2. 常用参数&#xff1a;-ef 返回系统中所有用户的所有进程的完整列表 -A 显示所有进程&#xff08;同-e&#xff09; -a 显示当前终端的所有进程 -u 显示进程的用户信息 -o 以用户…

33、一致性哈希算法分区

33、一致性哈希算法分区 一、背景二、介绍三、步骤1、算法构建一致性哈希环2、Redis服务器IP节点映射3、key落到服务器的落键规则 四、优点1、一致性哈希算法的容错性2、一致性哈希算法的扩展性 五、缺点1、一致性哈希算法的数据倾斜问题2、拓展 六、总结 一、背景 一致性哈希…

sylar高性能服务器-日志(P57-P60)内容记录

文章目录 P57-P60&#xff1a;序列化模块Varint&#xff08;编码&#xff09;Zigzag&#xff08;压缩&#xff09;class ByteArrayNode&#xff08;链表结构&#xff09;成员变量构造函数写入读取setPositionaddCapacity 测试 P57-P60&#xff1a;序列化模块 ​ 序列化模块通常…