美文网首页
二、IOC的定义和原理

二、IOC的定义和原理

作者: lifeline张 | 来源:发表于2018-08-28 08:55 被阅读0次

一、本课目标

  • 理解Spring IOC的定义和原理

二、什么是控制反转?

将组建对象的控制权从代码本身转移到外部容器。

  • 组件化的思想是:分离关注点、使用接口、不再关注实现。
  • 依赖的注入:将组件的构建和使用分开。


    image.png

分析:
1、组建对象的控制权:比如说我们平时如果使用A类调用B类,则我们需要在A类里面new一个B类的对象。这样一个new的过程就是A类获得B类对象调用权的过程,那么spring的控制反转就告诉我们这样做是不可取的,然后就给我们提供了一个IOC容器,这个容器就专门用来管理对象与对象之间的关系,专门管理组件对象的控制权,然后告诉我们不要再写代码了,在外部容器里面去管理这些东西,这就实现了将组件对象的控制权从代码本身转移到外部容器。

在A类里面new一个B类对象为什么不可取?
这样写的话:
1、代码耦合性大,在级别较高的项目中,类很多,一个类可以被很多类调用,在这种情况下,如果这个类被修改了,那在那些调用这个类的类中就可能出错。
2、不方便程序的扩展。比如说B类里面封装的是mysql数据库操作的代码,如果现在不用mysql了,而用oracle,这就要求程序员了解oracle相关的知识,如果再换的话,则对程序员的要求更高,这是一个很大的问题。

2.1、工厂模式

工程模式:根据我们提供的我们所需对象示例的描述,为我们返回我们所需要的产品。包括以下几个要素:
1、产品的规范
2、产品
3、工厂
4、客户端/调用

产品的规范,也就是接口:

public interface Animal {
    
    public void eat();
    
    public void sport();

}

产品1:

import interf.Animal;

public class Cat implements Animal {

    public void eat() {
        System.out.println("猫喜欢吃鱼");
    }

    public void sport() {
        System.out.println("猫很懒,不喜欢运动");
    }

}

产品2:

import interf.Animal;

public class Dog implements Animal{

    public void eat() {
        System.out.println("狗喜欢吃肉");
    }

    public void sport() {
        System.out.println("狗喜欢撒欢");
    }

}

工厂:

import interf.Animal;

public class Factory {
    // 定义字符串常量,负责与调用者交互
    public static final String CAT="cat";
    public static final String DOG="dog";
    // 根据调用者传进来的描述,来返回调用者所需要的对象实例
    public Animal getAnimal(String str){
        if (CAT.equals(str)) {
            return new Cat();
        } else if (DOG.equals(str)) {
            return new Dog();
        } else {
            return null;
        }
    }
}

客户端/调用者:

import interf.Animal;

import model.Factory;

import org.junit.Test;


public class FactoryTest {

    @Test
    public void test() {
        Factory factory = new Factory();
        Animal animal = null;
        animal = factory.getAnimal("cat");
        animal.eat();
        animal.sport();
        animal = factory.getAnimal("dog");
        animal.eat();
        animal.sport();
    }

}

运行结果:


image.png

这就是工厂模式,我们的springIOC也是建立在工厂模式的基础上的,但是跟工程模式也有所不同:工厂模式在使用的时候还需要new一个工厂类的实例出来,而我们的springIOC就不需要写任何的代码,这是一个比工厂模式更好地地方。

三、小结

image.png

相关文章

网友评论

      本文标题:二、IOC的定义和原理

      本文链接:https://www.haomeiwen.com/subject/citfwftx.html