Spring IOC源代码具体解释之整体结构

Spring ICO具体解释之整体结构

IOC介绍

IOC, spring的核心。贯穿Spring始终。直观的来说。就是由spring来负责控制对象的生命周期和对象间的关系,将对象之间的关系抽象出来。通过spring容器控制对象生成时机,降低对象之间的耦合度。

开启Spring IOC源代码学习

SpringIOC 的主要依赖源代码是 spring-beans 和 spring-context两个包。前面文章中曾今讲到了 怎样编译spring源代码,接下来将maven后的project导入eclipse里面。

一、spring IOC 中的Beanfactory

在Spring中,最主要的IOC容器接口是BeanFactory 。这个接口为详细的IOC容器的实现作了最主要的功能规定, 看例如以下类图,体现了Beanfactory的体系结构





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

BeanFactory 有三个子类:ListableBeanFactory、HierarchicalBeanFactory 和AutowireCapableBeanFactory。

可是从上图中我们能够发现终于的默认实现类是 DefaultListableBeanFactory。他实现了全部的接口。

那为何要定义这么多层次的接口呢?查阅这些接口的源代码和说明发现。每一个接口都有他使用的场合,它主要是为了区分在 Spring 内部在操作过程中对象的传递和转化过程中。对对象的数据訪问所做的限制。

比如 ListableBeanFactory 接口表示这些 Bean 是可列表的。而 HierarchicalBeanFactory 表示的是这些 Bean 是有继承关系的,也就是每一个Bean 有可能有父 Bean。AutowireCapableBeanFactory 接口定义 Bean 的自己主动装配规则。

这四个接口共同定义了 Bean 的集合、Bean 之间的关系、以及 Bean 行为.

再来看看Beanfactory源代码


public interface BeanFactory {

    //这里是对FactoryBean的转义定义,由于假设使用bean的名字检索FactoryBean得到的对象是工厂生成的对象,
    //假设须要得到工厂本身。须要转义       
    String FACTORY_BEAN_PREFIX = "&";

    这里依据bean的名字。在IOC容器中得到bean实例,这个IOC容器就是一个大的抽象工厂。

Object getBean(String name) throws BeansException; //这里依据bean的名字和Class类型来得到bean实例,和上面的方法不同在于它会抛出异常:假设依据名字取得的bean实例的Class类型和须要的不同的话。

Object getBean(String name, Class requiredType) throws BeansException; //这里提供对bean的检索。看看是否在IOC容器有这个名字的bean boolean containsBean(String name); //这里依据bean名字得到bean实例。并同一时候推断这个bean是不是单件 boolean isSingleton(String name) throws NoSuchBeanDefinitionException; //这里对得到bean实例的Class类型 Class getType(String name) throws NoSuchBeanDefinitionException; //这里得到bean的别名。假设依据别名检索,那么其原名也会被检索出来 String[] getAliases(String name); }

二、Spring IOC中的Beandefinition

SpringIOC容器管理了我们定义的各种Bean对象及其相互的关系。Bean对象在Spring实现中是以BeanDefinition来描写叙述的,其继承体系例如以下类图


三、spring IOC解析中BeandefinitionReader

Bean 的解析过程非常复杂,功能被分的非常细,由于这里须要被扩展的地方非常多,必须保证有足够的灵活性,以应对可能的变化。Bean 的解析主要就是对 Spring 配置文件的解析。

这个解析过程主要通过下图中的类完毕:


正如图中所说,XmlBeanDefinitionReader 和DefaultBeanDefinitionDocumentReader 有关系,是由于XmlBeanDefinitionReader中有一个DefaultBeanDefinitionDocumentReader,而不是xml跟default有继承关系

四、spring IOC中的ApplicationContext体系结构

ApplicationContext系列容器或许是我们最熟悉的,由于web项目中使用的XmlWebApplicationContext就属于这个继承体系,还有ClasspathXmlApplicationContext等。其继承体系例如以下图所看到的:


上面的四部分类图,算是spring IOC中最最核心的类图。理清了这四个类图,就基本能对整个ICO使用流程有一些大致了解。以下将分析IOC容器初始化源代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值