IOC的理解与掌握

一.什么是IOC

  1. IOC(Inversion of Control,控制反转):

    • IOC指的是将控制权从应用程序代码中转移到框架或容器中(在这里我通常指Spring)。传统的程序设计中,应用程序代码通常直接控制其依赖对象的创建与生命周期,而在IOC中,控制权被反转了,由框架或容器来负责管理和注入依赖对象,从而实现了松耦合的设计。
    • 例如,在典型的依赖注入中,对象不再负责创建它所依赖的对象,而是由外部容器(如Spring框架)来创建并注入这些依赖对象,这样做可以提高代码的灵活性和可测试性。
  2. 依赖注入(DI)

    • 依赖注入是IOC的一种实现方式,它指的是将一个对象的依赖关系(如构造函数、方法参数等)从对象本身分离出来,由外部容器动态地注入这些依赖关系。
    • DI通过接口或配置来实现,使得不同模块之间的依赖关系更清晰,并且能够方便地进行替换和扩展。

二.IOC的优点

  1. 优势与应用场景

    • 松耦合:通过IOC/DI,不同组件之间的耦合度降低,提高了代码的灵活性和可维护性。
    • 可测试性:依赖关系外置后,可以更容易地进行单元测试和集成测试。
    • 模块化:更容易实现模块化开发,各模块之间的职责更加清晰。

三.IOC/DI的实现方式

       1.Maven导入相关坐标

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>${spring.version}</version>
    </dependency>

     <!-- Spring Context:Spring 上下文 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>

        2.创建配置文件

        3.基本使用(这里使用注解注入)

                创建Dao层:

                创建Service层:

                在Web层进行测试:

                输出结果为:
 

可以看到程序能正常运行

四.补充说明

        一.依赖注入的几种方式

                1.set注入:

                        

                2.构造器注入:

注意要在UserService类中给出构造方法

                3.注解注入

                        就是我们上面演示的例子,常见的注解有以下几种:

                在实际开发中,注解注入更常见也更方便,相比于书写xml配置文件,注解的逻辑更清晰但一定程度上对代码可读性会造成一定影响

                4.集合注入

补充一点我们可以在xml配置文件中直接通过value给指定类的指定属性赋值:

同样的,我们可以给集合赋值,包括map,list等,形如:

五.总结

概念:
  • IOC(控制反转,Inversion of Control)

    • 一种设计原则,通过将控制权从应用程序代码中反转到框架或容器,达到解耦和提高代码灵活性的目的。
    • 实现方式包括依赖注入(DI)和面向服务(SOA)等方法。
  • DI(依赖注入,Dependency Injection)

    • IOC的一种具体实现方式,通过将对象的依赖(即其所需的其他对象)从内部创建转移到外部注入,由容器负责这部分工作,使代码更加模块化和易于测试。
    • 主要有三种注入方式:构造函数注入、Setter方法注入和接口注入。
应用:
  • Spring 框架

    • 广泛应用于企业级开发,利用IOC容器和DI机制,管理对象的生命周期和依赖关系。
    • 提供了多种注解(如 @Autowired@Component@Service@Repository 等)和 XML 配置方式。
  • Google Guice

    • 另一个流行的依赖注入框架,使用注解来描述依赖关系,简化对象创建过程。
  • 其他框架和库

    • 大多数现代的企业级框架、微服务框架等都采用IOC/DI机制,比如 Java EE CDI(Contexts and Dependency Injection)、.NET Core 的依赖注入机制等。

(缺点:

  1. 学习曲线
    • 对初学者来说,理解和掌握IOC/DI概念以及相关工具和框架需要一定学习成本。
  2. 调试复杂性
    • 由于依赖关系是由容器动态管理和注入的,排查BUG可能变得复杂,需要熟悉框架内部工作机制。
  3. 性能开销
    • 依赖注入等操作在运行时进行,可能在一定程度上影响系统性能,尤其是在大量对象管理的场景中。不过,现代IOC容器已经在性能优化方面做了大量工作。

  • 26
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值