`
买切糕的猴子
  • 浏览: 23457 次
社区版块
存档分类
最新评论

Spring架构揭秘-IOC容器

阅读更多
IOC容器简介
IOC容器体系结构
     容器组成部分
IOC容器工作机制
     bean生命周期
     容器加载管理的流程
 
     Spring的IOC相当于spring的心脏,spring所有的功能都是围绕容器来进行扩展的。有人说spring的IOC容器不就是一个Bean工厂嘛,利用反射实例化java bean然后缓存起来。对于这种见解,笔者只能认为其认知十分肤浅。IOC是控制反转的简称,也叫做依赖注入,也就是说将Bean的控制权都交由Spring来管理,理想的情况下是完全基于接口编程,至于具体使用哪个实现类完全交由第三方来决定,从而达到业务与系统框架完美解藕的目的。
     Spring的IOC不仅仅是完成了实例化Bean,它更多的是掌握Bean的控制权,IOC容器就像一台由各个精密的部件装配起来的高效运行的机器。下图揭示了IOC容器的组成部分。
IOC
     由上图可以知道IOC容器主要由两部份组成,分别是BeanFactory和ApplicationContext。如果说BeanFactory是Spring的心脏,那么ApplicationContext就是Spring的躯干了。下面我们来具体看下BeanFactory和ApplicationContext。
Bean Factory体系
     BeanFactory的这套继承体系堪称经典。BeanFactory主要的就是getBean(String beanName)方法获取Bean,接口本身并不关心获取的具体过程,就像我们只关心工厂能生产出什么产品,至于是如何生产,使用什么原料并不重要,因此这个基础的接口就达到了基础容器定义的目的。下面直接的就有三个子类接口,分别是  
      AutowireCapableBeanFactory:定义了容器中的Bean按照某种规则(名称、类型等)自动装配的方法 
     HierachicalBeanFactory:父子级联IOC容器接口,子容器可以根据该接口访问父容器
     ListableBeanFactory:定义了访问容器中Bean基本信息的方法,该接口的实现通常会加载所有在Spring中定义的Bean。
     在spring中最常使用的就是DefaultListableBeanFactory。下面来看看DefaultListableBeanFactory的继承体系
     我们可以看到DefaultListableBeanFactory除了具备BeanFactory的功能,它还实现了SingletonBeanRegistry接口,也就是Bean在Spring中的存储器,相当于Spring中Bean的内存数据库。它除了缓存Bean实例还缓存了Bean定义,这对于后续执行Bean处理器非常有用。
     至此我们就能大体的看出一个标准的容器所具有的功能和其内部的结构体系了,下面我们就来看看一个完整的容器ApplicationContext的结构体系
    从上图可以知道ApplicationContext不仅仅具备了Bean容器的功能,同时它还拥有国际化组件和事件监听器组件的功能。在一个应用框架里,相对于Bean容器,ApplicationContext就完整了很多。在往下看看Application的继承体系,可以发现一个ApplicationContext可以发育成各种优雅且强大的应用框架。
     从Application的继承体系中可以知道,它继承了 ListableBeanFactory, HierarchicalBeanFactory,于是就有了Bean Factory的基本功能同时还可以获取父容器。 然后还继承了 MessageSource,这是Spring中做国际化的顶层接口,Spring的设计者认为国际化是一个通用的组件,在系统信息输出的时候比如springMVC里的Controller,不同模块都有可能这些组件访问国际化信息,因此把Application与MessageSource结合起来就显得非常合理了。ApplicationContext还继承了 ApplicationEventPublisher,有了它以后ApplicationContext就可以发布事件并且允许注册事件监听器,使得Spring拥有一套比较完善的事件发布和监听机制。
     再来看看ApplicationContext的子类,可以发现我们熟悉的ClassPathXmlApplicationContext和FileSystemXmlApplicationContext,同时还有SpringBoot中使用的AnnotationConfigEmbeddedWebApplicationContext。这些实现可以满足了我们日常开发中web和非web环境下的开发需求。
Bean生命周期
     下面来看看Spring Bean生命周期流程
     由图可以看出来,在调用getBean()方法时,获取一个Bean之前需要经历执行初始化之前的逻辑,设置属性,设置方法,执行完成初始化后的动作然后将singleton的Bean放到缓冲池中,非singleton的就返回给client使用。在整个生命周期中BeanPostProcessor都扮演着重要的作用,事实上一个Bean在容器中需要经历哪些生命周期基本上由容器注册了哪些BeanPostProcessor来决定。
  • 大小: 38.3 KB
  • 大小: 32.5 KB
  • 大小: 122.5 KB
  • 大小: 107.7 KB
  • 大小: 53.9 KB
  • 大小: 83.8 KB
分享到:
评论
1 楼 zxs6587 2017-01-24  
最近在读spring源码,看到楼主这几篇文章受益匪浅,从架构上整体了解一下再读起来就轻松很多!!  

相关推荐

    spring揭秘pdf版

    首先,让我们来看看Spring的IoC容器。IoC是一种设计模式,它将对象的创建和管理从应用逻辑中解耦出来。在Spring中,IoC容器负责管理对象的生命周期和依赖关系。通过XML配置、注解或Java配置,我们可以告诉容器如何...

    源码级揭秘Spring框架

    4. **IoC(Inversion of Control,控制反转)**:这是DI的一种更高层次的概念,Spring通过IoC使得应用程序不再直接创建对象,而是由Spring容器来控制对象的生命周期和依赖关系。 5. **Spring MVC**:Spring的Model-...

    spring揭秘 经典

    - **IoC容器**:Spring框架的IoC容器是其核心组件之一,负责管理对象的生命周期和配置。通过IoC容器,开发者可以更轻松地实现依赖管理和组件的自动装配,从而减少代码中的硬编码,提高系统的灵活性和可扩展性。 - ...

    spring揭秘自学用 王福强 高清版

    1. **IoC(Inversion of Control)容器**:这是Spring的基础,通过XML配置或注解实现对象的创建和装配,实现DI,控制对象的生命周期。 2. **AOP**:提供面向切面的编程能力,可以实现日志记录、性能监控、事务管理...

    spring揭秘PDF

    3. **容器(IoC Container)**:Spring容器负责创建、配置和管理应用中的对象。它有两种主要类型:BeanFactory和ApplicationContext,后者提供了更多企业级服务。 4. **数据访问集成(DAO)**:Spring提供了对多种...

    spring文档整理

    Spring 2.0引入了AOP和IoC容器的重要改进,使得开发者能够更方便地管理对象的生命周期和装配。Spring 2.5则在2.0的基础上进行了扩展,增强了注解驱动的开发能力,比如使用`@Autowired`进行依赖注入,以及`@Component...

Global site tag (gtag.js) - Google Analytics