粉丝福利!
需要全套2025最新Java面试笔记的【点击此处即可】即可免费获取!
IOC基本概念:
Spring IOC容器类型:
依赖注入的方式:
IOC容器工作流程:
IOC优势:
"Spring的IOC,也就是控制反转,说白了就是把我们创建和管理对象的权力交给了Spring容器,而不是自己在代码里直接new对象。
打个比方,传统编程就像你自己做菜,需要自己买菜、洗菜、切菜、炒菜,你要控制整个过程。而用了IOC后,相当于你去了餐厅,你只需要点菜,厨师会帮你把菜做好端上来,你只管享用就行。
在没有Spring之前,如果我的UserService依赖于UserDao,我就得自己去创建UserDao对象:
public class UserService {
private UserDao userDao = new UserDao(); // 硬编码依赖
}
这样做的问题很明显:UserService和UserDao紧紧耦合在一起,如果我想换一个UserDao的实现,就得改代码;测试也很麻烦,没法方便地模拟UserDao的行为。
Spring的IOC帮我们解决了这个问题。现在代码变成这样:
public class UserService {
@Autowired
private UserDao userDao; // Spring会自动注入
}
这时候,UserService不再关心UserDao是怎么创建的,它只要用就行了。具体注入什么实现,由Spring配置决定。这就是"控制反转"的含义 - 创建对象的控制权从代码反转到了Spring容器。
Spring实现IOC主要通过"依赖注入"(DI)的方式。常见的注入方式有:
在我做的一个订单系统中,使用IOC后,我们能够根据不同客户的需求,无需修改代码就能灵活切换不同的支付处理策略。比如有些客户用支付宝,有些用微信支付,通过Spring配置就能轻松实现。
IOC的好处不仅是解耦,它还帮我们管理了对象的整个生命周期。比如单例Bean只会创建一次,Spring负责初始化它、维护它、销毁它。这样我们可以专注于业务逻辑,而不是对象管理的细节。
实际上,Spring的IOC容器有两种:BeanFactory和ApplicationContext。BeanFactory是最基本的容器,提供了基础的DI支持;ApplicationContext是更高级的容器,除了包含BeanFactory的所有功能外,还提供了事件发布、国际化支持等企业级特性。在实际项目中,我们基本上都是使用ApplicationContext。
总的来说,Spring的IOC帮我们实现了松耦合、可测试的代码结构,是整个Spring框架的基础。"