Spring | IOC及 Spring IOC 的具体表现形式

Spring系列 | IOC 知多少
今天的主要内容是IOC ,重点聚焦两个问题,一个是IOC 是什么,另一个是IOC在spring中是怎么体现和应用的。
用不太严谨但好懂的大白话来说,IOC就是把原来由应用程序自己来主动创建查找 管理对象的那部分,交给了框架处理。只要你告诉框架,你是那个对象,你需要哪个对象就可以了。不用在自己去找这个对象在哪里,也不用管怎么去找到并创建和销毁这个对象了。

IOC是什么

从定义和主要实现策略两个维度来展开

定义

IOC 在*上的定义是这样写的

In software engineering, inversion of control (IoC) is a programming principle.

IOC 是 inversion of control 的缩写,即控制反转。它是一种编程的原则或风格。
说起IOC的简史,它最早是1983年,Richard E.Sweet 在《TheMesaProgrammingEnvironment》中提出的 “Hollywood Principle” ,即 “好莱坞原则”,主要表达的意思也是大家很熟悉的一句话“不要来打电话给我,我会打电话给你” ,也就是导演 在会去联系演员,导演会打电话给演员,而不是演员主动联系导演。这里面其实就是控制反转的原则,在程序里对应则是:我们的依赖 或是我们的数据是由其他方来提供的,而非自己去读取的。

实现策略

在*中 Inversion_of_control 有这样的定义:

In object-oriented programming, there are several basic techniques to implement inversion of control. These are:
• Using a service locator pattern (注:服务定位模式)
• Using dependency injection (注:依赖注入), for example
• Constructor injection (注:构造器注入)
• Parameter injection (注:参数注入)
• Setter injection (注:setter注入)
• Interface injection (注:接口注入)
• Using a contextualized lookup (注:上下文的依赖查询 例如 bean context )
• Using template method design pattern (注:模板方法的设计模式)
• Using strategy design pattern (注:策略模式)

容器的职责

1 实现与任务的执行 要解耦
2 关注设计上的最终目标 而不是具体实现
3 对象生命周期的管理
4 配置

一些开源组件的主要实现

接下来看看IOC 容器在一些开源组件上的主要实现

  • Java SE : Java Beans,Java ServiceLoader SPI ,JNDI(Java Naming and Directory Interface)
  • Java EE :EJB(Enterprise Java Beans) Servlet
  • 其他开源
    • Apache Avalon(http://avalon.apache.org/closed.html)
    • PicoContainer(http://picocontainer.com/)
    • Google Guice(https://github.com/google/guice)
    • Spring Framework(https://spring.io/projects/spring-framework)

从EJB 3.0 开始,就出现了所谓的依赖注入和依赖查找并存的情况,之前大部分都是依赖查找形式。 这也算是一个小的分水岭了

接下来针对一个具体的框架来进行特性说明
Java Beans 作为IOC 容器特性

传统IOC容器的实现

特性:

  1. 依赖查找
  2. 生命周期
  3. 配置元信息
  4. 事件
  5. 自定义
  6. 资源管理
  7. 持久化

接下来重点聊下IOC 的依赖注入和依赖控制
Spring | IOC及 Spring IOC 的具体表现形式

Spring IoC 容器

IOC 是控制反转,这里再讲Spring IOC时,仍然是结合IOC 的特性来讲,在Spring里 是如何做到的依赖查找和依赖注入,再依赖查找里 具体是通过什么形式,再依赖注入里又是通过什么形式。将结合代码来看一下。这是这篇文章我最想详细介绍的内容

Spring | IOC及 Spring IOC 的具体表现形式

依次展示几个依赖查找和注入的案例
代码待补充

上一篇:【Day 5】Golang语法学习 ---2021/12/31


下一篇:python 定时任务schedule