什么是DI
- DI 也就是
依赖注入
,有一个那么高大上的词,其实也就是给类当中的属性设置值,前提条件下这个类必须要是 Spring 进行管理的
- 前提必须有
IOC
的环境
- 这个类被 Spring 管理的时候,才可以进行属性值注入也就是设置值
- 依赖注入:就是对 Spring 管理的类,通过配置文件的形式进行赋值的过程
传统的方式
- 接着上一篇文章的代码
- 修改
top.it6666.service.impl
目录下的 UserDaoMySQLImpl
实现类,添加一个字段 name
- 有 get/set 才叫属性没有就是叫字段
/**
* @author: BNTang
**/
public class UserDaoMySQLImpl implements UserDao {
public String name;
...
}
/**
* @author: BNTang
**/
public class UserDaoTest {
@Test
public void save() {
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
// 使用面向接口编程是没有办法设置属性值,所以我就以实现类来接收了
UserDaoMySQLImpl userDaoMySQL = (UserDaoMySQLImpl) applicationContext.getBean("userDao");
userDaoMySQL.name = "BNTang";
System.out.println(userDaoMySQL.name);
}
}
DI的方式
- 实现类当中的属性要提供
set方法
- 意思是如果要使用 DI 进行依赖注入,必须给字段提供 set 方法,因为它底层无非也就是需要调用 set 方法
/**
* @author: BNTang
**/
public class UserDaoMySQLImpl implements UserDao {
...
public void setName(String name) {
this.name = name;
}
...
}
- 在配置文件当中配置依赖注入,修改
applicationContext.xml
- 通过一个
property
的标签进行配置
- 这个标签有两个属性一个
name
一个 value
- name:需要注入的属性名称
- value:需要注入的值
...
<bean id="userDao" class="top.it6666.service.impl.UserDaoMySQLImpl">
<property name="name" value="BNTang"/>
</bean>
...
/**
* @author: BNTang
**/
public class UserDaoTest {
@Test
public void save() {
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDaoMySQLImpl userDaoMySQL = (UserDaoMySQLImpl) applicationContext.getBean("userDao");
System.out.println(userDaoMySQL.name);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具