IOC(Inversion of Control,控制反转)和 DC(Dependency Container,依赖容器)是相关但不完全相同的概念,它们服务于同一目标(解耦代码、管理依赖关系),但处于不同的抽象层级。
// 传统方式:类内部直接创建依赖
class UserService {
private UserRepository repository = new UserRepository();
}
// IOC:依赖从外部注入
class UserService {
private UserRepository repository;
public UserService(UserRepository repository) {
this.repository = repository; // 依赖由外部传入
}
}
// 配置容器(以 Spring 为例)
@Configuration
public class AppConfig {
@Bean
public UserRepository userRepository() {
return new UserRepository();
}
@Bean
public UserService userService(UserRepository repository) {
return new UserService(repository); // 容器自动注入 UserRepository
}
}
抽象层级不同:
历史演进:
功能扩展:
当你说“使用 IOC”时,通常指遵循控制反转原则编写代码;而“使用 DC”则指通过具体容器(如 Spring)管理依赖。两者共同服务于构建松耦合、可维护的代码架构。