IOC容器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Stream_who/article/details/81709046

一、基础概念

  1. IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。应用程序无需在代码中new相关的对象,应用程序由IOC容器进行组装

  2. spring IOC管理的对象,我们称为bean。bean就是spring容器初始化,装配,及管理的对象,除此之外,bean就与应用程序中的其他对象没有什么区别


二、工作流程

  1. 准备配置文件:在配置文件中声明Bean定义也就是为Bean配置元数据。

  2. 由IoC容器进行解析元数据: IoC容器的Bean Reader读取并解析配置文件,根据定义生成BeanDefinition配置元数据对象,IoC容器根据BeanDefinition进行实例化、配置及组装Bean。

  3. 实例化IoC容器:由客户端实例化容器,获取需要的Bean


三、BeanFactory

  1. BeanFactory作为最顶层的一个接口类,它定义了IOC容器的基本功能规范

  2. BeanFactory 有三个子类:ListableBeanFactory、HierarchicalBeanFactory 和AutowireCapableBeanFactory。默认实现类是 DefaultListableBeanFactory,他实现了所有的接口

  3. 继承体系
    这里写图片描述

    • 1)BeanFactory:位于类结构树的顶端,它最主要的方法就是getBean(String beanName) 该方法从容器中返回指定名称的Bean

    • 2)ListableBeanFactory: 该接口定义了访问容器中Bean基本信息的若干方法,如查看Bean的个数,获取某一类型Bean的配置名、查看容器中是否包含某一Bean等。

    • 3)HierarchicalBeanFatory: 父子级联IOC容器的接口,子容器可以通过接口方法访问父容器

    • 4)ConfigureableBeanFactory: 这是一个重要的接口,增强了IOC容器的可定制型。它定义了设置类装载器、熟悉编辑器、容器初始化后置处理器等方法

    • 5)AutowireCapableBeanFactory: 定义了将容器中的Bean按某种规则(如按名字匹配或类型匹配等)进行自动装配的方法

    • 6)SingletonBeanRegistry: 定义了允许在运行期向容器注册单实例Bean的方法

    • 7)BeanDefinitionRegistry: Spring配置文件中每一个节点元素在Spring容器里都通过一个BeanDefinition对象表示,它描述了Bean的配置信息,而BeanDefinitionRegistry接口提供了向容器手工注册BeanDefinition对象的方法。

    • 8) DefaultListableBeanFactory : 类图最底层,默认实现类


四、ApplicationContext

  1. ApplicationContext的主要实现类施ClassPathXmlApplicationContext和 FileSystemXmlApplicationContext, 前者默认从类路径加载配置文件,后者默认从文件系统中装载配置文件

  2. 继承了ListableBeanFactory和HierarchicalBeanFactory,在此基础上,还通过多个其他的接口扩展了BeanFactory的功能

  3. 继承体系

    这里写图片描述

    • 1)ApplicationEventPublisher: 让容器拥有发布应用上下文事件的功能,包括容器启动事件、关闭事件等。实现了ApplicationListener事件监听接口的Bean可以接收到容器事件,并对事件进行响应处理。在ApplicationContext抽象实现类AbstarctApplicationContext中存在一个ApplicationEventMulticaster,它负责保存所有的监听器,以便在容器产生上下文事件时通知这些事件监听者。

    • 2)MessageSource: 为应用提供il8n国际化消息访问的功能

    • 3)ResorucePatternResolver: 所有ApplicationContext实现类都实现了类似于PathMatchingResourcePatterResolver的功能,可以通过带前缀的Ant风格的资源文件路径装在spring的配置文件

    • 4)Lifecycle: 该接口提供了start()和stop()两个方法,主要用于控制异步处理过程。在具体使用是,该接口同时被ApplicationContext实现及具体Bean实现,ApplicationContext会将start/stop 的信息传递给容器中所有实现了该接口的Bean,以达到管理和控制JMX、任务调度等目的。

    • 5)ConfigurableApplicationContext:扩展于ApplicationContext,它新增了两个主要方法:refresh()和close(),让ApplicationContext具有启动、刷新和关闭应用上下文的能力。在应用上下文关闭的情况下调用refresh()即可启动应用上下文,在已经启动的状态下调用refresh()则可清除缓存并重新装载配置信息,而调用close()则可关闭应用上下文。


五、WebApplicationContext

  1. WebApplicationContext是专门为Web应用准备的,它允许从相对于Web根目录的路径中装载配置文件完成初始化工作

  2. 从WebApplicationContext中可以获得ServletContext的引用,整个Web应用上下文对象将作为属性放置到ServletContext中,以便Web应用环境可以访问Spring应用上下文

  3. 继承体系(相比就是多了一个ConfigureableWebApplicationContext), 多了跟ServletContext相关的东西

  4. 启动:相比前两者,它必须拥有Web容器的前提下才能完成启动。启动方法:

    1) 在web.xml中配置自启动(load-on-startup=1)的Servlet(org.springframework.web.context.ContextLoaderServlet)

    2) 在web.xml中配置监听器(org.springframework.web.context.ContextLoaderListener

参考网址

书籍:《精通Spring 4.x 企业应用开发实战》

Spring源码分析——BeanFactory体系之接口详细分析

注:文章是经过参考其他的文章然后自己整理出来的,有可能是小部分参考,也有可能是大部分参考,但绝对不是直接转载,觉得侵权了我会删,我只是把这个用于自己的笔记,顺便整理下知识的同时,能帮到一部分人。
ps : 有错误的还望各位大佬指正,小弟不胜感激

猜你喜欢

转载自blog.csdn.net/Stream_who/article/details/81709046