尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Spring的DI依赖注入(配置文件方式)

Spring的DI依赖注入(配置文件方式)
📅 发布时间:2026/6/19 17:10:51

目录

1.IOC和DI的概念

2.属性的set方法注入值

3.属性的构造方法注入值

4.数组,集合(List,Set,Map),Properties 等的注入


1.IOC和DI的概念

IOC:InverseofControl,控制反转,将对象的创建权反转给Spring。

DI:DependencyInjection,依赖注入,在Spring框架负责创建Bean对象时, 动态的将依赖对象注入到Bean组件中。

2.属性的set方法注入值

编写持久层OrderDao及其实现类:

package com.qcby.dao.Impl; import com.qcby.dao.OrderDao; public class OrderDaoImpl implements OrderDao { @Override public void saveOrder() { System.out.println("持久层:保存订单........"); } } package com.qcby.dao; public interface OrderDao { void saveOrder(); }

业务层OrderService及其实现类:

package com.qcby.service.Impl; import com.qcby.dao.OrderDao; import com.qcby.service.OrderService; public class OrderServiceImpl implements OrderService { //提供该属性的set方法,IOC容器底层通过属性的set方法注入值 private OrderDao orderDao; public void setOrderDao(OrderDao orderDao) { this.orderDao = orderDao; } //消息 private String msg; //年龄 private int age; public void setMsg(String msg) { this.msg = msg; } public void setAge(int age) { this.age = age; } @Override public void saveOrder() { System.out.println("业务层:保存订单:"+msg+" - "+age); orderDao.saveOrder(); } } package com.qcby.service; public interface OrderService { void saveOrder(); }

测试方法:

/** * 测试DI注入 */ @Test public void testDI(){ ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); //获取到了OderService的Bean,这个Bean里面的信息在配置文件里面配置好了 OrderService orderService = (OrderService) context.getBean("os"); orderService.saveOrder(); }

运行:

流程分析:

Spring读取配置文件后,会首先创建OrderDaoImpl,以od为键存入容器

<bean id="od" class="com.qcby.dao.Impl.OrderDaoImpl"/>

然后创建OrderServiceImpl

<bean id="os" class="com.qcby.service.Impl.OrderServiceImpl"> <!--找到OrderDao的setOrderDao方法,把这个bean注入到os里面--> <property name="orderDao" ref="od"/> <!--给OrderServiceImpl赋值,也是通过set方法赋值--> <property name="msg" value="你好"/> <property name="age" value="19"/> </bean>

通过无参构造方法创建OrderServiceImpl实例,再通过setOrderDao、setMsg和setAge方法来获取值,也就是依赖注入

测试代码首先读取配置文件(第一行代码),获取到了orderServiceImpl这个Bean(第二行代码),最后调用对象的saveOrder方法。

3.属性的构造方法注入值

新建Car类

package com.qcby.eneity; public class Car { //名称 private String name; //金额 private String money; public Car() { } public Car(String name, String money) { this.name = name; this.money = money; } @Override public String toString() { return "Car{" + "name='" + name + '\'' + ", money='" + money + '\'' + '}'; } }

在配置文件当中配置:

<!--构造方法注入值--> <bean id="car" class="com.qcby.eneity.Car"> <constructor-arg name="name" value="福特"/> <constructor-arg name="money" value="1000000"/> </bean>

测试方法:

/** * 测试构造方法注入 */ @Test public void testConstructor(){ ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); Car car = (Car) context.getBean("car"); System.out.println(car); }

运行:

constructor-arg是构造器参数,用于构造方法注入,name是参数名字,value是参数的值

4.数组,集合(List,Set,Map),Properties 等的注入

新建CollectionBean类

package com.qcby.eneity; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Properties; public class CollectionBean { //数组 private String[]strs; public void setStrs(String[]strs){ this.strs=strs; } private List<String> list; public void setList(List<String>list){ this.list=list; } private Map<String,String> map; public void setMap(Map<String,String>map){ this.map=map; } private Properties properties; public void setProperties(Properties properties){ this.properties=properties; } @Override public String toString(){ return"CollectionBean{"+ "strs="+ Arrays.toString(strs)+ ",list="+list+ ",map="+map+ ",properties="+properties+ '}'; } }

配置Bean

<!--给集合属性注入值--> <bean id="collectionBean" class="com.qcby.eneity.CollectionBean"> <property name="strs"> <array> <value>美美</value> <value>凤凤</value> </array> </property> <property name="list"> <list> <value>熊大</value> <value>熊二</value> </list> </property> <property name="map"> <map> <entry key="aaa" value="老王"/> <entry key="bbb" value="小王"/> </map> </property> <property name="properties"> <props> <prop key="username">root</prop> <prop key="password">123456</prop> </props> </property> </bean>

测试代码

/** * 引用类型的注入 */ @Test public void testReferenceType(){ ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); CollectionBean collectionBean = (CollectionBean) context.getBean("collectionBean"); System.out.println(collectionBean); }

结果:

相关新闻

  • Office Tool Plus v10.29.50 office安装激活一条龙
  • 如何编写优美的代码:从工匠到艺术家的修炼之路
  • AI搜索焦虑自救指南:一份面向2026年的系统化追赶方案

最新新闻

  • 洪湖上门回收黄金哪家放心 2026大盘行情与避坑全攻略 - 润富黄金回收
  • 曲靖哪里回收黄金靠谱 2026六月实测三家实体门店无套路 - 润富黄金回收
  • 2026苏州黄金回收门店梯队测评,个人闲置黄金变现优选与避雷完整指南 - 奢侈品交易观察员
  • 2026重庆名表回收榜单|靠谱门店凭什么只剩收的顶稳居榜首? - 奢侈品回收测评
  • C标准数学库深度解析:从hypot与log函数看数值计算工程实践
  • 2026年6月昆明黄金回收行情 哪里回收黄金不被扣损耗 - 润富黄金回收

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号