我是靠谱客的博主 柔弱钢笔,最近开发中收集的这篇文章主要介绍小马哥讲Spring核心编程思想 - 第二章 重新认识IoC,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

极客时间 - 小马哥讲Spring核心编程思想

第二章 重新认识IoC

什么是 IOC

In software engineering, inversion of control (IoC) is a programming principle. IoC inverts the flow of control as compared to traditional control flow. In IoC, custom-written portions of a computer program receive the flow of control from a generic framework. A software architecture with this design inverts control as compared to traditional procedural programming: in traditional programming, the custom code that expresses the purpose of the program calls into reusable libraries to take care of generic tasks, but with inversion of control, it is the framework that calls into the custom, or task-specific, code.

– https://en.wikipedia.org/wiki/Inversion_of_control

IoC 的简史

  • 1983年,Richard E. Sweet 在《The Mesa Programming Environment》中提出“Hollywood Principle”(好莱坞原则)
  • 1988年,Ralph E. Johnson & Brian Foote 在 《Desiging Reusable Classes》中提出“Inversion of control”(控制反转)
  • 1996年,Michael Mattsson 在《Object-Oriented Frameworks,A survey of methodological issues》中将“Inversion of control”命名为“Hollywood Principle”
  • 2004年,Martin Fowler 在《Inversion of Control Containers and the Dependency Injection pattern》中提出了自己对Ioc以及DI的理解。
  • 2005年,Martin Fowler 在《InversionOfControl》对Ioc做出了进一步的说明

Ioc 主要实现策略

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
    • Interface injection
  • Using a contextualized lookup
  • Using template method design pattern
  • Using strategy design pattern

– https://en.wikipedia.org/wiki/Inversion_of_control#Implementation techniques


在《Expert One-on-OneTM J2EETM Development without EJBTM》的 128页提到:

IoC is a broad concept that can be implemented in different ways. There are two main types:

❑ Dependency Lookup: The container provides callbacks to components, and a lookup context.
This is the EJB and Apache Avalon approach. It leaves the onus on each component to use container APIs to look up resources and collaborators. The Inversion of Control is limited to the
container invoking callback methods that application code can use to obtain resources.

❑ Dependency Injection: Components do no look up; they provide plain Java methods enabling
the container to resolve dependencies. The container is wholly responsible for wiring up components, passing resolved objects in to JavaBean properties or constructors. Use of JavaBean
properties is called Setter Injection; use of constructor arguments is called Constructor Injection

Ioc 的职责

Inversion of control serves the following design purposes:

  • To decouple the execution of a task from implementation.
  • To focus a module on the task it is designed for.
  • To free modules from assumptions about how other systems do what they do and instead rely on contracts.
  • To prevent side effects when replacing a module.

Inversion of control is sometimes facetiously referred to as the "Hollywood Principle: Don't call us, we'll call you".

– https://en.wikipedia.org/wiki/Inversion_of_control


  • 通用职责
  • 依赖处理
    • 依赖注入
    • 依赖查找
  • 生命周期管理
    • 容器的生命周期
    • 托管的资源(Java Beans 或 其他资源:event …)
  • 配置
    • 容器
    • 外部化配置
    • 托管的资源

Ioc 容器的主要实现

  • Java SE
    • Java Beans
    • Java ServiceLoader SPI
    • JNDI (java Naming and Directory Interface)
  • Java EE
    • EJB(Enterprise Java Beans)
    • Servlet
  • 开源
    • Apache Avalon (close)
    • PicoContainer
    • Google Guice
    • Spring Framework

Java Beans 做为 ioc 容器

  • 特性
    • 依赖查找
    • 生命周期管理
    • 配置元信息
    • 事件
    • 自定义
    • 资源管理
    • 持久化
  • 规范
    • JavaBeans
    • BeanContext
    • http://download.oracle.com/javase/tutorial/javabeans/
    • https://www.oracle.com/technetwork/java/javase/documentation/spec-136004.html

如何界定 IOC 容器的轻重

《Expert One-on-OneTM J2EETM Development without EJBTM》的第六章第一小节

依赖查找 VS 依赖注入

在这里插入图片描述

使用时要因地制宜

构造器注入和 Setter 注入

最后

以上就是柔弱钢笔为你收集整理的小马哥讲Spring核心编程思想 - 第二章 重新认识IoC的全部内容,希望文章能够帮你解决小马哥讲Spring核心编程思想 - 第二章 重新认识IoC所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部