Spring IOC 学习一

作者: ystwo | 来源:发表于2019-03-07 17:01 被阅读17次

    一、什么是Spring IOC?


    所谓IOC就是由spring来负责对象或资源的生命周期和对象之间的关系的,也就是对对象或资源的创建及管理。

    二、IOC的四个要点是什么?


    一、谁控制了谁?

                ——传统模式中当一个对象A 需要另外一个对象B或资源C支持时需要自己主动去new B或加载C 。也就是主动控制对象或资源的获取。但用了spring 后就会发现 这一切都可以不用自己亲自“动手”,IOC就可以帮我们搞定了。所以是Spring IOC 控制了对象和资源

    二、控制了什么?

                ——控制了对象和资源

    三、为什么是反转?

                ——由原来的主动获取对象和资源的“正转方式”,变成了现在完全有IOC帮着分配对象或资源的方式,所以叫反转。

    四、哪些方面反转了?

                ——所依赖的对象和资源被反转。

    三、IOC有哪几种方式提供对象资源?

    一、构造器方式注入

            ——构造方法都知道有参和无参两种,所以我认为可以分为“先天”和“后天”两种。先天——则是这个对象很牛掰 “出生”就自带对象;后天——则是需要我们手动注入依赖参数对象(这种我们可以称之为“指腹为婚”)。

    二、setter方法注入

            ——这种方式比较自由是有被注入的对象提供条件生产所需的对象。比如:他需要一个老婆 (set老婆),这个老婆对象是他“定制”的 比如:1、林志玲一样的声音;2、高圆圆一样的容貌;3、刘诗诗一样的温柔;4、赵丽颖样的可爱;5、迪丽热巴一样的身高等等。(现实中能娶这样女人的男人都是家里有矿啊。)

    三、接口方式注入

            ——这一种就类似A1类实现A接口一样。比较霸道,可能要被逼接受一些自己不需要的方法。

    四、IOC核心接口类

    借鉴该大神的一张图:https://singleant.iteye.com/blog/1177358

    这张图基本上诠释了Spring IOC容器的核心接口。当然这张图是以ClassPathXmlApplicationContext 切入点观澜全局的。

    另外还有三个点:

    XmlWebApplicationContext、GenericXmlApplicationContext、FileSystemXmlApplicationContext 都能回溯到ApplicationContext 核心接口类中

    借鉴该大神的图:https://blog.csdn.net/yujin753/article/details/47043143

    五、IOC 五大核心体系

    (1)Resource 体系:

                ——resource 是spring 对资源的抽象 ,他下面的每一个实现类都代表着一种资源访问的策略:

                 UrlResource

                FileUrlResource

                FileSystemResource

                ClassPathResource

                ByteArrayResource

                 InputStreamResource 以上都是继承AbstractResource而来,还有一些是直接继承Resource

    上面的只是对资源的抽象封装,如果要使用那就需要对资源的加载。所以下图是ResourceLoader ——资源加载器。Spring正是通过下图结构对Resource资源体系的加载。

    (2)BeanFactory体系

            ——BeanFactory体系是整个Spring对Bean的创建和管理的一个工厂。它其中维护者一个重要的参数beanDefinitionMap<String,BeanDefinition>。

                    BeanFacoty 有三个直接子类 ListableBeanFactory、HierarchicalBeanFactory 和 AutowireCapableBeanFactory。DefaultListableBeanFactory 为最终默认实现,它实现了所有接口

    (3)BeanDefinition体系

               ——是对Spring中的对象的描述或者说封装

    (4)BeanDefinitionReader体系

            ——是对spring配置文件的获取和解析,并将配置文件的中的内容转换成IOC容器格式的对象:BeanDefinition 就是上面的。

    (5)ApplicationContext体系也是整个Spring IOC最核心的

            ——它是整个spring的容器,他继承了BeanFactory所有接口,而且自己也扩展了额外的接口。所以可以说是BeanFactory的升级版。

    那到底比BeanFactory高级在哪里?如下:

    1、继承 MessageSource,提供国际化的标准访问策略。

    2、继承 ApplicationEventPublisher ,提供强大的事件机制。

    3、扩展 ResourceLoader,可以用来加载多个 Resource,可以灵活访问不同的资源。

    4、对 Web 应用的支持

    再来重新看一遍ApplicationContext整个体系图


    相关文章

      网友评论

        本文标题:Spring IOC 学习一

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