浅析IOC

84 阅读1分钟

IoC(控制反转)是一种设计原则,核心思想是将对象的创建和依赖管理交给外部容器,而非在代码内部直接控制。

IOC的实现方式分为依赖查找(DF)和依赖了注入(DI)

DI和DF区别

1. 主动性差异

  • 依赖查找:对象主动调用容器API(如getBean())获取依赖项,需要显式编码查找逻辑1 4 8
  • 依赖注入:依赖项由容器被动推送到对象中(如通过@Autowired),无需显式查找代码1 6 10

2. 代码侵入性

  • 依赖查找:需在业务代码中嵌入容器API(如ApplicationContext.getBean()),侵入性强1 4 9
  • 依赖注入:通过注解或配置声明依赖关系,代码无显式容器API调用,侵入性低1 6 10

3. API依赖性

  • 依赖查找:强依赖容器API(如Spring的ApplicationContext),导致代码与容器绑定1 7 8
  • 依赖注入:不依赖容器API,仅通过接口或注解定义依赖,更易脱离容器测试1 7 11

4. 可读性与灵活性

  • 依赖查找:依赖关系在代码中显式体现,可读性更高4 5
  • 依赖注入:依赖关系通过配置或注解隐式绑定,灵活性更强但需注意潜在规则(如@Autowired按类型/名称注入)1 6 9

5. 适用场景

  • 依赖查找:适合动态获取依赖(如插件化架构)或需精细控制依赖的场景1 8
  • 依赖注入:适合常规业务开发,提升模块解耦和可维护性2610