美文网首页
硬怼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