Spring IOC 学习一

一、什么是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 切入点观澜全局的。

 

 

Spring IOC 学习一

另外还有三个点:

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

Spring IOC 学习一

五、IOC 五大核心体系

(1)Resource 体系:

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

             UrlResource

            FileUrlResource

            FileSystemResource

            ClassPathResource

            ByteArrayResource

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

 

Spring IOC 学习一

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

Spring IOC 学习一

(2)BeanFactory体系

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

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

 

Spring IOC 学习一

(3)BeanDefinition体系

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

 

Spring IOC 学习一

(4)BeanDefinitionReader体系

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

 

Spring IOC 学习一

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

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

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

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

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

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

4、对 Web 应用的支持

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

Spring IOC 学习一