什么是IOC
- IOC:Inversion of Control(控制反转)
- 控制反转:将对象的创建权反转给(交给)Spring
传统开发模式
- 业务和实现类过于紧密
- 如果想要从当前实现类切换到另一个实现类需要修改源代码,如果没有源码的话那就改不了了:

- 通过工厂的设计模式可以实现,接口与实现类业务的分离
- 但是,当需要切换时,还是需要修改
BeanFactory
- 尽量在
不需要修改源代码
的基础上,对程序进行扩充,也就是进行扩展

- 在工厂内部使用配置文件的方式进行加载(也就是通过反射,你在配置文件中给定类的全路径即可加载)
- 在需要改变实现类的时候,就不需要修改源码,只需要修改配置文件的类路径即可

使用Spring-IOC


创建配置文件
- 通常名称起为
applicationContext.xml
- 在 intellij IDEA 中创建一个
resources
文件夹,专门用来存放配置文件,也就是资源目录
- 创建好了之后呢还需要标记为资源目录,否则 Intellij IDEA 不会把它编译到
src
中,标记方式如下:

- 创建好了
applicationContext.xml
文件之后添加如下内容:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>
- 在
top.it6666.service
目录下创建 UserDao
接口:
- 然后在接口当中定义规范也就是定义方法:
/**
* @author: BNTang
**/
public interface UserDao {
void save();
void delete();
}
- 在
top.it6666.service.impl
目录下创建 UserDaoMySQLImpl
实现类,实现 UserDao
接口:
- 然后在实现接口当中的方法:
/**
* @author: BNTang
**/
public class UserDaoMySQLImpl implements UserDao {
@Override
public void save() {
System.out.println("MySQL → save");
}
@Override
public void delete() {
System.out.println("MySQL → delete");
}
}
- 在
top.it6666.service.impl
目录下创建 UserDaoOracleImpl
实现类,实现 UserDao
接口:
- 然后在实现接口当中的方法:
/**
* @author: BNTang
**/
public class UserDaoOracleImpl implements UserDao {
@Override
public void save() {
System.out.println("Oracle → save");
}
@Override
public void delete() {
System.out.println("Oracle → delete");
}
}
- 修改
applicationContext.xml
配置文件
- 添加一个实现类的配置,也就是配置一个类的全路径
...
<bean id="userDao" class="top.it6666.service.impl.UserDaoMySQLImpl"/>
...
- id:为自己起的名称
- class:为接口实现类的全路径,也就是类的全路径
/**
* @author: BNTang
**/
public class UserDaoTest {
@Test
public void save() {
// 1.加载配置文件
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
// 2.获取配置文件当中配置的实现类
UserDao userDao = (UserDao) applicationContext.getBean("userDao");
userDao.save();
}
}
- getBean:参数为配置文件当中 <bean> 的Id
【推荐】国内首个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生成工具