Spring——依赖注入

开启DI服务(依赖注入)

DI依赖注入的理解

  1. 依赖开发人员提供相关输入
  2. 依赖Spring容器对象将相关数据赋到属性中

基于XML文件

通过set方法注入

  1. property标签通过调用属性对应的set方法完成赋值
  2. 属性赋值
    1. 基本类型赋值 value="xxx"
    2. 引用类型赋值 ref = "xxx"
<bean id="xxx" class="com.wry.bean.Emp"><property name="属性名"  value="属性值"/><property name="属性名"   ref="Spring容器中已拥有的key"/>
</bean>
演示
<bean id="dept" class="com.wry.bean.Dept"><property name="deptno" value="1"/><property name="dname"  value="Accounting"/><property name="loc"    value="Beijing"/>
</bean><bean id="emp" class="com.wry.bean.Emp"><property name="empno"  value="3"/><property name="ename"  value="Zhangsan"/><property name="dept"   ref="dept"/>
</bean>
public void test01(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");Emp emp = (Emp) applicationContext.getBean("emp");System.out.println(emp);//Emp{empno = 3, ename = Zhangsan, dept = Dept{deptno = 1, dname = Accounting, loc = Beijing}}
}

通过构造方法注入

要求Spring容器对象调用当前类中的有参构造方法完成对象创建与初始化

<constructor-arg index="xxx"/name="empno" value="">标签

  • name/index属性二选一
    • index为参数的下标
    • name为参数名
  • value/ref二选一
    • value 简单类型
    • ref 引用类型
演示
    <bean id="dept" class="com.wry.bean.Dept"><constructor-arg index="0" value="1"/><constructor-arg index="1" value="Accounting"/><constructor-arg index="2" value="Beijing"/></bean><bean id="emp" class="com.wry.bean.Emp"><constructor-arg name="empno" value="10"/><constructor-arg name="ename" value="Zhangsan"/><constructor-arg name="dept" ref="dept"/></bean>
public void test01(){ApplicationContext app = new ClassPathXmlApplicationContext("spring.xml");Emp emp = (Emp) app.getBean("emp");System.out.println(emp);//Emp{empno = 10, ename = Zhangsan, dept = Dept{deptno = 1, dname = Accounting, loc = Beijing}}
}

基于注解

  • 条件
    • 注解并不需要有set方法
    • 必须有无参构造方法才可以使用注解进行依赖注入
  • 基本类型
    • @Value("属性值")
  • 引用类型
    • @Autowired
      • 翻译:自动注入
      • 注入逻辑
        • 默认情况下,Spring容器使用属性名称作为key,到Spring容器对象寻找对应对象
        • 如果在Spring容器对象并不存在以属性名作为key的对象,则在Spring容器内寻找与当前属性类型相匹配对象进行赋值
        • 无属性名作为key的对象且相同属性类型对象有两个时,抛出异常
    • @Qualifier("id")
      • 注入id对应的引用对象

演示

XML配置文件与测试类
<context:component-scan base-package="com.wry.bean"/>
public void newObjectTest01(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");Emp emp = (Emp) applicationContext.getBean("emp");System.out.println(emp);
}
@Autowire
@Component
public class Dept {@Value("100")private Integer deptno;@Value("市场部")private String dname;@Value("北京")private String loc;public Dept() {}public Dept(Integer deptno, String dname, String loc) {this.deptno = deptno;this.dname = dname;this.loc = loc;}。。。
}
@Component
public class Emp {@Value("1000")private Integer empno;@Value("张三")private String ename;@Autowiredprivate Dept dept;public Emp() {}。。。
}
@Qualifier("id")
@Component
public class Dept {@Value("100")private Integer deptno;@Value("市场部")private String dname;@Value("北京")private String loc;public Dept() {}public Dept(Integer deptno, String dname, String loc) {this.deptno = deptno;this.dname = dname;this.loc = loc;}。。。
}
@Component
public class Emp {@Value("1000")private Integer empno;@Value("张三")private String ename;@Qualifier("dept")private Dept dept;public Emp() {}。。。
}

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

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

相关文章

VScode-配置文件

导入配置文件 ShiftCtrlp 输入&#xff1a; import 选择文件 点击确认 导出配置文件 设置选择导出 确认导出 保存为本地文件 保存文件

黄金票据攻击

黄金票据攻击——域内横向移动技术 一、黄金票据攻击介绍&#xff1a; 黄金票据攻击是一种滥用Kerberos身份认证协议的攻击方式&#xff0c;它允许攻击者伪造域控krbtgt用户的TGT&#xff08;Ticket-Granting Ticket&#xff09;。通过这种方法&#xff0c;攻击者可以生成有效…

【原创】基于springboot+vue疫苗预约管理系统设计与实现

个人主页&#xff1a;程序猿小小杨 个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交…

element-ui tableData导出为xlsx文件

下载 npm i / yarn add file-saver、xlsx库 引入 import FileSaver from “file-saver”; import XLSX from “xlsx”; const simexport (data) > {// if (data.create_time && data.create_time.length > 0) {// data.start_time parseTime(data.create_tim…

Rust vs C++:2024,谁更懂错误处理?

讲动人的故事,写懂人的代码 「席双嘉,听说你的C++项目又因为忘了检查返回值导致内存泄漏,又加班了?」 周五中午,在国内某科技巨头熙熙攘攘的员工餐厅,贾克强半开玩笑地戳了戳坐在隔壁的席双嘉,眼神中满是戏谑。 贾克强,一个热衷于Rust的程序员,总是乐于挑战和探索新…

mfw-攻防世界

题目 点击about发现Git感觉是Git泄露 直接访问.git 本来用githack去扒源码但是成功了没文件一脸懵&#xff0c; 后面换一个工具githacker注意二个之间有区别 githack和githacker 然后去结果里查看文件 发现flag文件但是 没什么用 <?php // TODO // $FLAG ; ?> 然后…

算法设计和分析1( 算法问题求解基础)

chapter1 算法问题求解基础 1.1算法概述 1.什么是算法 算法—用计算机实现的问题求解方法。5个特征 &#xff08;1&#xff09;输入&#xff1a;0或多个 &#xff08;2&#xff09;输出&#xff1a;至少一个 &#xff08;3&#xff09;确定性&#xff1a;算法每一条指令都有…

QCC发射(TX SOURCE)USB发射A2DP音乐,实现MIC声音到主机

之前写过 CSR8670/8675 发射&#xff08;TX SOURCE&#xff09;USB发射A2DP音乐&#xff0c;实现MIC声音到主机的文章&#xff0c;目前把该方案移植到QCC方案&#xff08;QCC3040 QCC3056&#xff09;。 因 CSR8670/8675成本比较贵&#xff0c;现在移植到QCC平台。 由于众多游…

Pytorch for training1——read data/image

blog torch.utils.data.Dataset create dataset with class torch.utils.data.Dataset automaticly import torch from torch.utils.data import Datasetclass MyDataset(Dataset):def __init__(self, data):self.data datadef __getitem__(self, index):# 根据索引获取样本…

一句命令pip卸载所有已安装库

pip3 list --formatfreeze | grep -v ^\-e | grep -v pip | grep -v setuptools | cut -d -f 1 | xargs -n1 pip3 uninstall -y 这个命令的解释如下&#xff1a; pip list --formatfreeze&#xff1a;列出所有已安装的库及其版本号。grep -v ^\-e&#xff1a;排除那些以-e开…

华为OD面试手撕算法-合并排序数组

题目描述 本题是leetcode一道简单题&#xff1a;合并两个有序数组&#xff0c;但是对于时间和空间复杂度面试官明确给出了限制。 // 给定两个排序后的数组 A 和 B&#xff0c;其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法&#xff0c;将 B 合并入 A 并排序。 // 初始化…

maya移除节点 修改节点

目录 maya移除节点 使用 Maya 用户界面&#xff1a; 使用脚本&#xff1a; maya 修改节点名字 使用 Maya 用户界面&#xff1a; 使用 MEL 脚本&#xff1a; 使用 Python 脚本&#xff1a; 注意事项&#xff1a; maya移除节点 使用 Maya 用户界面&#xff1a; 在“层次…

Gin框架(3)

文件上传与下载 文件上传 单文件上传 单文件上传指的是一次只上传一个文件。在Gin中&#xff0c;可以使用c.SaveUploadedFile方法来保存单个上传的文件。 // SaveUploadedFile uploads the form file to specific dst. func (c *Context) SaveUploadedFile(file *multipart…

对 NGINX、Kong 和 Amazon 的 API 管理解决方案进行基准测试:它们能否交付实时 API?

原文作者&#xff1a;Alessandro Fael Garcia of F5 原文链接&#xff1a;对 NGINX、Kong 和 Amazon 的 API 管理解决方案进行基准测试&#xff1a;它们能否交付实时 API&#xff1f; 转载来源&#xff1a;NGINX 开源社区 NGINX 唯一中文官方社区 &#xff0c;尽在 nginx.org.c…

HAL STM32 硬件I2C方式读取AS5600磁编码器获取角度例程

HAL STM32 硬件I2C方式读取AS5600磁编码器获取角度例程 &#x1f4cd;相关篇《STM32 软件I2C方式读取AS5600磁编码器获取角度例程》 ✨stm32使用硬件I2C去读取角度数据&#xff0c;通过STM32CubeMX工具配置工程&#xff0c;读取角度数据&#xff0c;只需要调用一个函数&#xf…

常见的服务器技术

常见的服务器技术 1.虚拟化技术&#xff1a;虚拟化技术允许在一台物理服务器上创建多个虚拟服务器&#xff0c;每个虚拟服务器都可以独立运行不同的操作系统和应用程序。这大大提高了服务器的资源利用率&#xff0c;并提供了更好的灵活性、可扩展性和可靠性。 2.负载均衡技术&…

谷歌(Google)技术面试——在线评估问题(一)

谷歌&#xff08;Google&#xff09;面试过程的第一步&#xff0c;你可能会收到一个在线评估链接。 评估有效期为 7 天&#xff0c;包含两个编码问题&#xff0c;需要在一小时内完成。 以下是一些供你练习的在线评估问题。 在本章结尾处&#xff0c;还提供了有关 Google 面试不…

使用 RisingWave、NATS JetStream 和 Superset 进行实时物联网监控

在物联网&#xff08;IoT&#xff09;背景下&#xff0c;处理实时数据会遇到一些特定的障碍&#xff0c;如边缘计算资源不足、网络条件限制、扩展性存在问题、设备间有多样性差异。要克服这些挑战&#xff0c;需要高效的边缘计算技术、强大的安全措施、标准化协议、可扩展的管理…

接口自动化框架搭建(六):多进程执行

1&#xff0c;背景目的 当测试用例太多之后&#xff0c;想缩短执行时间&#xff0c;就需要多线程或者多进程执行。 多线程执行&#xff1a; 每条测试用例是独立的&#xff0c;测试用例之间的参数不能共同使用 采坑举例&#xff1a;接口自动化中请求头是公共参数&#xff0c;…

Sqlite插入单引号和双引号,防止sql注入

1. 方法1 sqlite3_mprintf替换sprintf,%q替换%s. 1.1. 举例 修改前代码 //修改前, hello123写入失败char sql[1000]char* sql sprintf("UPDATE table SET name %s WHERE name_id %d","hello123", 1);rc sqlite3_exec(db, sql, NULL, NULL, &err…