`
ol_beta
  • 浏览: 289272 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

Spring源码阅读——BeanFactory体系结构

阅读更多

以下是看代的码随笔,想到哪写到哪,没有组织逻辑,见谅见谅。

FileSystemXmlApplicationContext为例,看看BeanFactory的体系结构。

 

类图(点击放大):


从上往下:

 

  1. BeanFactory:BeanFactory:Spring的Bean容器最顶层的接口,定义了Ioc容器的基本规范。实现这个接口的Ioc容器都会持有一些BeanDefinition和一个唯一的字符串形式的名字。
  2. HierarchicalBeanFactory:HierarchicalBeanFactory继承BeanFactory并扩展使其支持层级结构。getParentBeanFactory()方法或者父级BeanFactory,containsLocalBean(String name)方法查看当前BeanFactory是否包含给定名字的Bean,不会递归想父级查找
  3. ListableBeanFactory:同样扩展BeanFactory使其支持迭代Ioc容器持有的Bean对象。注意如果ListableBeanFactory同时也是HierarchicalBeanFactory,那么大多数情况下,只迭代当前Ioc容器持有的Bean对象,不会在体系结构中想父级递归迭代。具体情况请看API说明。
  4. ResourceLoader:Spring提供资源的根接口。在Spring Ioc中,资源被Resource引用,获得Resource对象,说明获得了资源的访问。Resource提供资源的抽象,具体资源可是从URL,classpath,file等地方获得。
  5. ResourcePatternResolver:ResourcePatternResolver是对ResourceLoader的扩展,其支持模式匹配的资源。如:classpath*:表示匹配路径下所有的资源。
  6. DefaultResourceLoader:ResourceLoader的默认实现,可以单独使用,也可以通过扩展使其支持特殊的资源,如:FileSystemResourceLoader,ClassPathXmlApplicationContext等。
  7. ApplicationEventPublisher:封装事件发布,通知事件监听者此Application的事件。
  8. MessageSource:处理Spring 中的消息,支持i18n和参数化消息。另外其子类ReloadableResourceBundleMessageSource支持不重启JVM刷新消息。
  9. EnvironmentCapable:实现此接口的容器将支持上下文环境。在Spring Ioc容器中,都是支持上下文环境的。
  10. ApplicationContext:从上图来看,ApplicationContext继承了上面描述的所有接口,因此ApplicationContext是一个接口集合,提供所继承接口的功能。另外,ApplicationContext在启动后是只读的,但是如果ApplicationContext实现类支持reload,也可以刷新这个ApplicationContext。
  11. Lifecycle:对BeanFactory提供生命周期支持。另外其他任何对象都可以实现Lifecycle接口开支持开始/结束控制。注意Lifecycle接口只支持顶层对象,其他的Lifecycle将被忽略
  12. DisposableBean:DisposableBean提供了在销毁Ioc容器的时候释放资源。
  13. ConfigurableApplicationContext:提供对Ioc容器的配置的支持。包括设置父级容器,设置上下文环境,刷新容器,注册关闭容器钩子等。
  14. AbstractApplicationContext:AbstractApplicationContext是Ioc容器的抽象实现,这里实现了大部分的功能:消息,事件,刷新容器,生命周期等。AbstractApplicationContext采用模板方法模式,把一部分实现推迟到子类。
  15. AbstractRefreshableApplicationContext:提供多线程同时刷新容器支持,每次刷新都会产生一个内部BeanFactory(DefaultListableBeanFactory)。另外,子类要实现loadBeanDefinitions方法来正确加载Bean定义。
  16. Aware:Aware是个标记接口,实现这个接口的对象提供通知Spring容器功能。具体个通知动作来子类中定义。
  17. BeanNameAware:Aware的子接口,当设置BeanName的时候,创建通知。
  18. InitializingBean:这个接口作用是当Bean对象的属性都被设置完成或,可以立即做一些自定义的动作。令一个替代方案是设置init-method。
  19. AbstractRefreshableConfigApplicationContext:提供对容器的一些特殊设置:setConfigLocation,setBeanName,setId等。
  20. AbstractXmlApplicationContext:从XML读取Bean定义的容器,这个容器实现了loadBeanDefinitions方法,从XML资源中获得Bean定义。
  21. FileSystemXmlApplicationContext:标准的从文件系统读XML的Bean定义容器。getResourceByPath方法返回文件系统资源
说了这么多的BeanFactory,还有一个重量级的没有说:DefaultListableBeanFactory
DefaultListableBeanFactory包含了Ioc容器的重要内容,很多容器都会用的它。如AbstractApplicationContext.refersh()方法就会销毁内部的容器并重新创建一个DefaultListableBeanFactory作为起内部表示。DefaultListableBeanFactory则直接继承它成为从XML读取资源的Ioc容器。
在DefaultListableBeanFactory有一个ConcurrentHashMap保存了Bean的定义。
/** Map of bean definition objects, keyed by bean name */
	private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<String, BeanDefinition>();
 另外附上DefaultListableBeanFactory的层级结构图:

 



  • 大小: 33.3 KB
  • 大小: 28.6 KB
分享到:
评论
2 楼 ol_beta 2012-10-12  
云之遥 写道
用idea导出的类结构么,这个真不错诶..
我用myeclipse只能导出自己写的类的类图

是的,导出类图非常简单。右键想要导出类-->Diagrams 就直接生产关系了。
而且生产的图可以查看源码,显示字段和方法等。
1 楼 云之遥 2012-10-11  
用idea导出的类结构么,这个真不错诶..
我用myeclipse只能导出自己写的类的类图

相关推荐

    Spring源码分析

    在源码层面,Spring的IoC容器通过一系列的接口和抽象类定义了IoC容器的体系结构。例如,BeanFactory接口、HierarchicalBeanFactory接口、ListableBeanFactory接口等都是BeanFactory接口的不同扩展。这些接口和抽象类...

    spring-framework4.2x源码

    总之,深入研究Spring Framework 4.2.x的源码,不仅可以提升对Spring的理解,还能加深对Java和软件工程整体知识体系的认识,为开发者提供宝贵的实战经验。通过结合Eclipse和Gradle工具,我们可以更有效地探索这个...

    spring源码学习

    ### Spring源码学习知识点 #### 一、BeanDefinition详解 ##### 1.1 BeanDefinition定义与继承体系 **BeanDefinition** 是Spring框架中一个非常重要的概念,它本质上是用来描述一个Bean(即Java对象)的配置元数据...

    spring源代码解析

    简单的说,在web容器中,通过ServletContext为Spring的IOC容器提供宿主环境,对应的建立起一个IOC容器的体系。其中,首先需要建立的是根上下文,这个上下文持有的对象可以有业务对象,数据存取对象,资源,事物管理...

    Spring原理篇.xmind

    包括内容:Spring体系结构、Spring重要接口讲解(BeanFactory继承体系、BeanDefinition继承体系、ApplicationContext继承体系)、IOC/DI(容器初始化流源码分析)、AOP原理(解析流程,代理流程,执行流程)、事务...

    spring-framework-master.zip

    在实际开发中,理解Spring源码有助于优化性能、解决bug和定制功能。例如,通过了解IoC容器的工作流程,可以更有效地管理bean的生命周期;理解AOP的实现,有助于编写更灵活的切面;掌握Spring MVC的处理流程,能够...

    spring第一天课堂笔记

    Spring框架的体系结构主要包括以下几个部分: - **核心容器**:这是Spring框架的基础,包括BeanFactory和ApplicationContext两个主要组件。BeanFactory用于创建和管理Bean实例,而ApplicationContext则在此基础上...

    Spring基础学习,适合新人

    Spring的体系结构由多个模块组成,可以灵活地选择所需的部分,从而降低了复杂性。 **1.1.3 Spring的体系结构** Spring框架主要分为六个部分: 1. Core Container(核心容器) - Beans:提供了BeanFactory,这是...

    23种模式详解-java附详细文档

    在Java库中,`AWT`和`Swing`图形组件体系结构就是桥接模式的例子。 9. **组合模式**:允许你将对象组合成树形结构,表现“部分-整体”的层次结构。在Java中,`TreeSet`和`TreeMap`的实现就运用了组合模式。 10. **...

Global site tag (gtag.js) - Google Analytics