spring源码之旅(1)_BeanFactory与ApplicationContext继承体系

                                                               

 

BeanFactory接口Spring ioc容器的核心接口,它提供了从容器获取bean以及bean信息的最基本功能。BeanFactory接口中所定义的几个方法很简单,为了在ioc容器中提供更多的功能,spring框架中提供了许多BeanFactory功能的子接口与实现。按照“单一职责”的设计原则,每一次接口的扩展,将在其原有父接口的基础子上增加新的功能。

ApplicationContext接口BeanFactory接口的子接口,在包含BeanFactory所提供的全部功能之外,其功能得到了更大的增强,包括各种不同应用层的context实现,国际化消息资源处理,各种不同路径不同类型的资源加载,application Event事件发布等,ApplicationContext能够更加好地满足不同企业应用的各种不同需求。在Spring框架中,ApplicationContext接口也有许多子接口与实现,通过层层扩展与实现,最终ApplicationContext形成了一个功能强大的ioc容器。

 

 

BeanFactory接口继承体系(仅列出一些较核心的接口与类):

 

 

 

beanFactory继承体系uml图

一个接口一个责任,层次非常清晰

n         BeanFactory接口 spring ioc容器核心接口,主要功能为根据bean的名称获取beanbean的信息,提供的接口功能有:

查找是否有指定名称的bean,

根据名称获取bean,

根据名称获取所有的别名,

根据名称获取beanclass类型,

根据名称判断bean是否是单例或prototype

     判断名称为namebean是否与指定类型相匹配

n         ListableBeanFactory接口:继承自BeanFactory,提供对容器内的bean的枚举与遍历功能,主要功能有:

查找是否有指定名称bean的定义

获取容器内bean的数量及所有bean的名称

根据指定类型获取bean的集合

n         HierarchicalBeanFactory接口:继承自BeanFactory,支持父子BeanFactory的继承,主要功能有判断当前BeanFactory中是否含有指定名称的bean、获取父BeanFactory

n         ConfigurableBeanFactory接口:继承自HierarchicalBeanFactorySingletonBeanRegistry接口,为beanFactory添加了一些配置的功能,包括添加BeanPostProcessor后置处理器、PropertyEditorRegistrar属性编辑器、别名,设置父beanFactory、类加载器缓存,并提供了对Scope的支持,除此之外还有销毁bean和容器中所有单例,获取后置处理器数量,类型转换器,复制ConfigurableBeanFactory 信息,判断指定的bean当前是否正在创建等功能。同时,由于该接口继承自SingletonBeanRegistry接口,因此其也具有管理beanFactory中的单例对象的功能。

n         AutowireCapableBeanFactory接口:继承自BeanFactory,提供自动装配的功能

n         ConfigurableListableBeanFactory接口:继承自ListableBeanFactory, AutowireCapableBeanFactory, ConfigurableBeanFactory此三个接口,并定义了获取BeanDefinition和预先实例化单例bean的功能。

n         AbstractBeanFactory类:BeanFactory接口进行了基础性的实现,提供了ConfigurableBeanFactory接口的所有功能。其功能和特点主要有:

通过继承自DefaultSingletonBeanRegistry类,提供了对单例对象的cache缓存

可以根据bean名称,决定对象是prototype还是单例类型

Bean别名的支持

Bean定义RootBeanDefinitionChildBeanDefinition的合并

FactoryBean创建bean与其本身的支持

Bean析构时调用destroy()方法或其本身配置的销毁方法进行后置处理

实现了HierarchicalBeanFactory接口,支持BeanFactory容器的父子继承关系

本类给其子类留下了三个抽象方法:

boolean containsBeanDefinition(String beanName);

BeanDefinition getBeanDefinition(String beanName);

createBean(String beanName, RootBeanDefinition mbd, Object[] args); 

 

 

ApplicationContext接口继承体系(仅列出一些较核心的接口与类):

 

 

 

applicationContext uml图

n         ApplicationContext接口: spring context核心接口,其由BeanFactory接口的子接口扩展而来,因此具有BeanFactory的所有功能,又因为其继承了MessageSource, ApplicationEventPublisher, ResourcePatternResolver接口,因此又具有国际化消息解析,资源加载,ApplicationEvent事件发布的功能。在此接口自己定义的方法中提供了获取父ApplicationContext、获取自动装配bean工厂,获取启动时间和显示名称这四项功能。

n         ConfigurableApplicationContext接口:继承自ApplicationContextLifecycle接口,为客户端提供了配置与定制ApplicationContext相关设置的功能,主要内容有:

    设置父ApplicationContext

    添加BeanFactory后置处理器BeanFactoryPostProcessor

    添加ApplicationListener

    获取ApplicationContext内部的BeanFactory(ConfigurableListableBeanFactory类型)

刷新与关闭applicaionContext

注册关闭时的shutdown hook

判断当前applicationcontext是否处于活动(active状态)

n         AbstractApplicationContext类:ApplicationContext进行抽象实现,其内部的refresh()方法实现了ApplicationContext的启动流程,其doClose()方法则实现了applicationcontext的关闭流程。另外对其继承的多个接口中的方法,均有默认实现。

此类给子类留下了三个抽象方法:

       ConfigurableListableBeanFactory getBeanFactory();

void closeBeanFactory();

void refreshBeanFactory();

n         AbstractRefreshableApplicationContext类:继承自AbstractApplicationContext类,支持多次刷新。此类对其基类AbstractApplicationContext所留下的三个方法均进行了默认实现,其中在refreshBeanFactory()方法中完成了刷新的功能,并调用了createBeanFactory()方法创建一个DefaultListableBeanFactory对象来作为代理的内部类,在其子类的实现中将通过此beanFactory来加载配置中的BeanDefinition,创建和管理bean

此类只留给子类一个抽象方法:

void loadBeanDefinitions(DefaultListableBeanFactory beanFactory)

beanFactory中加载beanDefinitions

n         AbstractXmlApplicationContext类:继承自AbstractRefreshableApplicationContext类,其内部实现了从xml配置文件中加载和解析beanDefinition

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值