美文网首页
硬怼Spring-IOC(二)

硬怼Spring-IOC(二)

作者: 三丶斤 | 来源:发表于2019-07-05 15:28 被阅读0次

1. Spring ICO理论

假设我向做一个“人开车”的模型,首先我们的要一辆车,其次我们还得要一个人。那么用Java怎么创建呢?酱紫:

public class Car {
    private String name;

    public Car(String name) {
        this.name = name;
    }
}

public class Person {

    private String name;
    private Car car;

    public Person(String name, Car car) {
        this.name = name;
        this.car = car;
    }
}

public class Main {
    public static void main(String[] args) {
        Car car = new Car("法拉利");
        Person person = new Person("张三", car);
    }
}

再上面的例子中,“人开车”,就需要把车对象注入到人对象中,上面的装载方式是通过构造器将车对象传递进去,这是我们传统的开发模式。而IOC是什么?控制反转。那么就有几个问题了:

1.为什么要有IOC?

传统的开发模式中,我们需要自己手动new 出对象,如果对象之间需要注入,我们可以通过构造器方式setter方式将被依赖对象注入进去。那么你可以想一想,一两个对象还好说,new set我们可以写出来,但假若有100,1000个对象呢?new 的手累,并且其中依赖关系也是极为的复杂。而IOC就可以解决这2个问题,用一句话概括IOC:管理Java对象的创建及其依赖关系。

传统开发模式 IOC

2.谁控制谁?

明白第一个问题这个问题就好说,
传统方式中:(谁)coder控制(谁)Java对象
IOC方式:(谁)IOC容器控制(谁)Java对象

3.反转什么?
传统方式中我们通过构造器/setter方式注入依赖对象,有了IOC之后,对象只是被动接收依赖的注入。也即依赖对象的获取反转了

1.1 IOC三种注入方式

1.构造器注入
就是我们开头“人开车”例子中,把(依赖对象),当作(被依赖对象)构造器参数传递进去。
2.setter注入
Javabean中我们可以通过getter/setter方式来获取/设置对象的属性。所以也可以通过setter方式把依赖对象注入到被依赖对象内。
3.接口方式注入
接口方式注入需要被依赖对象实现某个接口,也不是很常用。
感性却的胖友可以看看: 依赖注入的三种实现形式 —— 接口注入(Interface Injection)

2. IOC组件

2.1 Resource

org.springframework.core.io.Resource 其实就是Spring对资源的一种抽象描述,比如xxxx.xml

image

2.1.1 ResourceLoader

有了资源,ResourceLoader 对资源进行加载。


image

2.2 BeanDefinition

你要描述一个人,可以用name/age/height等等属性进行描述,那么对于JavaBean应该怎么描述呢?org.springframework.beans.factory.config.BeanDefinition就是对JavaBean的描述,比如是否单例等等。

2.3 BeanFactory

org.springframework.beans.factory.BeanFactory的内部有一个Map<String,BeanDefinition>的map用于保存所有的bean,我们可以从中拿到我们想要的bean。

2.4 BeanDefinitionReader

org.springframework.beans.factory.support.BeanDefinitionReader用于从各种资源中读取JavaBean,比如从xxx.xml读取出JavaBean对象。

2.5 ApplicationContext

org.springframework.context.ApplicationContext就是一个Spring容器,翻译过来叫做上下文,我把它叫做环境。

文章总结

介绍IOC理论以及Spring主要对象。

相关文章

网友评论

      本文标题:硬怼Spring-IOC(二)

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