一、什么是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整个体系图
网友评论