Spring(02)重新认识 IoC

目录

  • Spring(02)重新认识 IoC

    • 1. IoC 发展简介
    • 2. IoC 主要实现策略
    • 3. IoC 容器的职责
    • 4. IoC 容器的实现
    • 5. 传统 IoC 容器实现
    • 6. 轻量级 IoC 容器
    • 7. 依赖查找VS. 依赖注入
    • 8. 构造器注入 VS. Setter 注入
    • 9. 面试题精选

Spring(02)重新认识 IoC

1. IoC 发展简介

  • 1983年,Richard E. Sweet 在《The Mesa Programming Environment》中提出 “Hollywood Principle”(好莱坞原则)
  • 1988年,Ralph E. Johnson & Brian Foote 在《Designing 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 在《Inversion Of Control》对IoC 做出进一步的说明

2. IoC 主要实现策略

维基百科(https://en.wikipedia.org/wiki/Inversion_of_control

Implementation techniques 小节的定义:

In object-oriented programming, there are several basic techniques to implement inversion of control. These are:

  • Using a service locator pattern(SPI)
  • Using dependency injection, for example(依赖注入)
    • Constructor injection(构造器注入)
    • Parameter injection(参数注入)
    • Setter injection(setter 方法注入)
    • Interface injection(接口回调)
  • Using a contextualized lookup(依赖查找)
  • Using template method design pattern(模板方法)
  • Using strategy design pattern(策略模式)

3. IoC 容器的职责

  • 依赖处理

    • 依赖查找
    • 依赖注入
  • 生命周期管理
    • 容器
    • 托管的资源(Java Beans 或其他资源)
  • 配置
    • 容器
    • 外部化配置
    • 托管的资源(Java Beans 或其他资源)

4. IoC 容器的实现

5. 传统 IoC 容器实现

Java Beans 作为 IoC 容器

6. 轻量级 IoC 容器

7. 依赖查找VS. 依赖注入

类型 依赖处理 实现便利 侵入性 API依赖性 可读性
依赖查找 主动获取 相对繁琐 侵入业务代码 依赖容器API 良好
依赖注入 被动提供 相对便利 低侵入 不依赖容器API 一般

8. 构造器注入 VS. Setter 注入

  • 构造器注入只能根据参数的顺序执行,而 Setter 注入则是无序。
  • 构造器注入可以将字段设置为 final,保证一致性。
  • 很多时候,我们希望 bean 一旦初始化后就不能被修改,此时可以使用构造器注入。

9. 面试题精选

问题1:什么是 IoC ?

答:简单地说,IoC 是反转控制,类似于好莱坞原则,主要有依赖查找和依赖注入实现。

问题2:依赖查找和依赖注入的区别?

答:依赖查找是主动或手动的依赖查找方式,通常需要依赖容器或标准 API 实现。而依赖注入则是手动或自动依赖绑定的方式,无需依赖特定的容器和 API。

问题3:Spring 作为 IoC 容器有什么优势?

答:Spring 优势有

  • 典型的 IoC 管理,依赖查找和依赖注入
  • AOP 抽象
  • 事务抽象
  • 事件机制
  • SPI 扩展
  • 强大的第三方整合
  • 易测试性
  • 更好的面向对象


每天用心记录一点点。内容也许不重要,但习惯很重要!

原文地址:https://www.cnblogs.com/binarylei/p/12290197.html

时间: 2024-11-08 21:47:30

Spring(02)重新认识 IoC的相关文章

Spring.net-简易的IoC框架

两个类: public class Person { public string Name { get; set; } public int Age { get; set; } } public class PersonDao {     private int intpro;     public PersonDao(int intpro)    {        this.intpro = intpro;    }    public Person Entity { get; set; } 

spring.net中的IoC、DI和MVC

概述 spring.net是一个开源的业务层的框架,功能非常的强大,归结一下有3个功能:面向切面编程:IoC和DI:提供综合型的框架支持,本片博客主要说一下IoC和DI,和其提供的对MVC框架的支持. IoC和DI IoC,英文全称Inversion of Control,控制反转:DI,英文全称Dependency Injection,依赖注入.简而言之,IoC就是创建对象,DI就是创建对象的时候,进行初始化. IoC和DI就相当于我们通常写的抽象工厂+反射,只不过比抽象工厂的功能强大,但是其

Spring框架学习之IOC(一)

Spring框架学习之IOC 先前粗浅地学过Spring框架,但当时忙于考试及后期实习未将其记录,于是趁着最近还有几天的空闲时间,将其稍微整理一下,以备后期查看. Spring相关知识 spring是J2EE应用程序框架,是轻量级的IoC和AOP的容器框架,主要是针对javaBean的生命周期进行管理的轻量级容器.可单独使用,通常也与其他框架整合使用,例如SSH.SSM. IOC:控制反转 控制权由对象本身转向容器:由容器根据配置文件去创建实例并创建各个实例之间的依赖关系.等同于DI依赖注入 A

深入浅出Spring(二) IoC详解

上次的博客深入浅出Spring(一)Spring概述中,我给大家简单介绍了一下Spring相关概念.重点是这么一句:Spring是为了解决企业应用开发的复杂性而创建的一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架.在这句话中重点有两个,一个是IoC,另一个是AOP.今天我们讲第一个IoC. IoC概念 控制反转(Inversion of Control)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题. 它还有一个名字叫做依赖注入(Dependency Injection)

spring源码分析---IOC(1)

我们都知道spring有2个最重要的概念,IOC(控制反转)和AOP(依赖注入).今天我就分享一下spring源码的IOC. IOC的定义:直观的来说,就是由spring来负责控制对象的生命周期和对象间的关系,将对象之间的关系抽象出来,通过spring容器控制对象生成时机,减少对象之间的耦合度. 更通俗一点的说就是,JAVA程序中,当你在代码中需要使用某个类提供的功能时,你首先需要new一个对象,给它传递必要的参数,然后才能使用它提供的功能:有了IOC之后,IOC的容器类似一个中介,所有的对象都

Spring框架学习之IOC(二)

Spring框架学习之IOC(二) 接着昨天的内容,下面开始IOC基于注解装配相关的内容 在 classpath 中扫描组件 <context:component-scan> 特定组件包括: –@Component: 基本注解, 标识了一个受 Spring 管理的组件 –@Respository: 标识持久层组件 –@Service: 标识服务层(业务层)组件 –@Controller: 标识表现层组件 对于扫描到的组件, Spring 有默认的命名策略: 使用非限定类名, 第一个字母小写.

spring 学习 AOP和IOC

自11开始接触三大框架,至今已俞5载, 当时风光无限的ssh,现在还在被广泛使用,并有扩大之势的只有spring了 spring主要特性,是广为使用的AOP(面向切面)和IOC(控制反转) 1.其中,IOC(控制反转)也叫依赖注入,使用最是广泛 基本概念是:不创建对象,但是描述创建它们的方式.在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务.容器 (在 Spring 框架中是 IOC 容器) 负责将这些联系在一起. 就是通过在代码中大量使用接口,并为所有参数编写get,

spring基于注解的IOC(2)

spring第二天:spring基于注解的IOC以及IoC的案例1.spring中ioc的常用注解 用于创建对象的:Component.Controller.Service.Repository 用于注入数据的:Autowired.Qualifier.Resource.Value 用于改变作用范围的:Scope . 和生命周期相关:PreDestroy .PostConstruct 2.案例使用xml方式和注解方式实现单表的CRUD操作 持久层技术选择:dbutils3.改造基于注解的ioc案例

Spring核心思想之IOC总结

说到Spring的核心思想Ioc和aop不是Spring提出来的,在Spring之前就已经存在,只不过更偏向理论化,Spring在技术层次把两个思想做了非常好的实现(java) 第一部分:什么是IOCIOC Inversion of Control (控制反转/反转控制),注意它是?个技术思想,不是?个技术实现描述的事情:Java开发领域对象的创建,管理的问题传统开发?式:?如类A依赖于类B,往往会在类A中new?个B的对象 IoC思想下开发?式:我们不???去new对象了,?是由IoC容器(S

Spring(05)IoC 依赖查找

目录 Spring(05)IoC 依赖查找 1. 依赖查找的今世前生 2. 单一类型依赖查找 3. 集合类型依赖查找 4. 层次性依赖查找 5. 延迟依赖查找 6. 安全依赖查找 7. 内建可查找的依赖 8. 依赖查找中的经典异常 9. 面试题精选 Spring(05)IoC 依赖查找 Spring 核心编程思想目录:https://www.cnblogs.com/binarylei/p/12290153.html 1. 依赖查找的今世前生 单一类型依赖查找 JNDI:javax.naming.