zoukankan      html  css  js  c++  java
  • Spring IoC与DI

    Inversion of Control (IoC)

    A bean is an object that is instantiated, assembled, and managed by a Spring IoC container. Otherwise, a bean is simply one of many objects in your application.

    翻译:bean是一个由Spring IoC容器实例化、组装和管理的对象。

    与传统控制对象不同,对象由Spring IoC容器控制,而不由我们控制,所以称为控制反转。

    Dependency Injection (DI)

    Dependency injection (DI) is a process whereby objects define their dependencies (that is, the other objects with which they work) only through constructor arguments, arguments to a factory method, or properties that are set on the object instance after it is constructed or returned from a factory method.

    翻译:依赖注入(DI)是对象只能通过构造器参数工厂方法参数或者在属性已经被构造或工厂方法返回后在对象实例上设置的属性来定义他的依赖(依赖是指与他一起运作的其它的对象)的过程

    通过官方文档原话我们可以得到以下有用的信息:

    1. 依赖:与他一起运作的对象被称为依赖。
      比如Person类将Dog类对象作为属性,那么Person类的创建将依赖Dog类。
    2. 注入:三种注入方式:
      1. 构造器
      2. 工厂方法
      3. 对象实例属性

    IoC与DI关系

    IoC is also known as dependency injection (DI).

    翻译:IoC作为依赖注入(DI)所被熟知

    为什么Spring能解偶

    通过下面例子来讲解

    这是Spring项目目录结构

    src
    ├── main
    │   ├── java
    │   │   └── cn
    │   │       └── arrayblog
    │   │           └── pojo
    │   │               └── Hello.java
    │   └── resources
    │       └── beans.xml
    └── test
        ├── java
        │   └── HelloTest.java
        └── resources
    

    共包含Hello.javabeans.xmlHelloTest.java三个文件

    Hello.java:bean
    beans.xml:定义bean对象
    HelloTest.java:创建bean对象

    传统方式,仅Hello.javaHelloTest.java便能创建bean对象,属性赋值需要通过构造器、set方法或者工厂方法手动赋值。

    如果使用Spring,那么你需要beans.xml来定义对象,HelloTest.java会根据beans.xml的内容所指定Hello.java来创建bean对象,并对其属性自动赋值。

    Q&A

    Spring使得bean对象创建更复杂了吗?

    • beans.xml文件的引入使项目结构变得复杂
    • bean对象创建变得简单,因为属性自动赋值
    • bean对象易于管理,因为都被存在beans.xml

    Spring如何做到解偶?

    Spring通过beans.xml来降低了对象类使用该对象类创建对象的类的耦合度。

    举个例子

    不使用Spring,当我们手动创建一个对象类使用该对象类创建对象的类,假设我们需要对使用该对象类创建对象的类进行关于对象类属性值的修改,那我们需要重新编译两个文件。

    使用Spring,由于beans.xml不参与编译的原因,上述情况就可以通过修改beans.xml内容来解决。

  • 相关阅读:
    cocos2d-x类型转换(CCstring int string char UTF-8互转)
    cocos2d-x 实心圆
    CCLabelTTF的多行显示(仅限中文)
    cocos2d-x 弹窗
    cocos2d-x 画线
    cocos2d-x 利用CCLabelTTF制作文字描边与阴影效果的实现方法
    cocos2d-x 背景色修改
    cocos2d-x 中文乱码问题
    HelloWorld.exe 中的 0x0f9265f6 (libcocos2d.dll) 处有未经处理的异常: 0xC0000005: 读取位置 0x00000038 时发生访问冲突
    error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
  • 原文地址:https://www.cnblogs.com/arrayblog/p/13866219.html
Copyright © 2011-2022 走看看