- 浏览: 290324 次
- 性别:
- 来自: 天津
文章分类
最新评论
-
狼子六:
已经开始用了
Java 枚举7常见种用法 -
相约的旋律:
方法一下面的"public static fianl ...
Java 枚举7常见种用法 -
kiddy2012:
...
[转载]程序员装B指南 -
fancy105:
写得很好,简单明了双全面!
Java 枚举7常见种用法 -
he_wen:
请问一下 G1算法是否在线上使用了?
Garbage First(G1) 日志分析工具
以下是看代的码随笔,想到哪写到哪,没有组织逻辑,见谅见谅。
以FileSystemXmlApplicationContext为例,看看BeanFactory的体系结构。
类图(点击放大):
从上往下:
- BeanFactory:BeanFactory:Spring的Bean容器最顶层的接口,定义了Ioc容器的基本规范。实现这个接口的Ioc容器都会持有一些BeanDefinition和一个唯一的字符串形式的名字。
- HierarchicalBeanFactory:HierarchicalBeanFactory继承BeanFactory并扩展使其支持层级结构。getParentBeanFactory()方法或者父级BeanFactory,containsLocalBean(String name)方法查看当前BeanFactory是否包含给定名字的Bean,不会递归想父级查找。
- ListableBeanFactory:同样扩展BeanFactory使其支持迭代Ioc容器持有的Bean对象。注意如果ListableBeanFactory同时也是HierarchicalBeanFactory,那么大多数情况下,只迭代当前Ioc容器持有的Bean对象,不会在体系结构中想父级递归迭代。具体情况请看API说明。
- ResourceLoader:Spring提供资源的根接口。在Spring Ioc中,资源被Resource引用,获得Resource对象,说明获得了资源的访问。Resource提供资源的抽象,具体资源可是从URL,classpath,file等地方获得。
- ResourcePatternResolver:ResourcePatternResolver是对ResourceLoader的扩展,其支持模式匹配的资源。如:classpath*:表示匹配路径下所有的资源。
- DefaultResourceLoader:ResourceLoader的默认实现,可以单独使用,也可以通过扩展使其支持特殊的资源,如:FileSystemResourceLoader,ClassPathXmlApplicationContext等。
- ApplicationEventPublisher:封装事件发布,通知事件监听者此Application的事件。
- MessageSource:处理Spring 中的消息,支持i18n和参数化消息。另外其子类ReloadableResourceBundleMessageSource支持不重启JVM刷新消息。
- EnvironmentCapable:实现此接口的容器将支持上下文环境。在Spring Ioc容器中,都是支持上下文环境的。
- ApplicationContext:从上图来看,ApplicationContext继承了上面描述的所有接口,因此ApplicationContext是一个接口集合,提供所继承接口的功能。另外,ApplicationContext在启动后是只读的,但是如果ApplicationContext实现类支持reload,也可以刷新这个ApplicationContext。
- Lifecycle:对BeanFactory提供生命周期支持。另外其他任何对象都可以实现Lifecycle接口开支持开始/结束控制。注意Lifecycle接口只支持顶层对象,其他的Lifecycle将被忽略。
- DisposableBean:DisposableBean提供了在销毁Ioc容器的时候释放资源。
- ConfigurableApplicationContext:提供对Ioc容器的配置的支持。包括设置父级容器,设置上下文环境,刷新容器,注册关闭容器钩子等。
- AbstractApplicationContext:AbstractApplicationContext是Ioc容器的抽象实现,这里实现了大部分的功能:消息,事件,刷新容器,生命周期等。AbstractApplicationContext采用模板方法模式,把一部分实现推迟到子类。
- AbstractRefreshableApplicationContext:提供多线程同时刷新容器支持,每次刷新都会产生一个内部BeanFactory(DefaultListableBeanFactory)。另外,子类要实现loadBeanDefinitions方法来正确加载Bean定义。
- Aware:Aware是个标记接口,实现这个接口的对象提供通知Spring容器功能。具体个通知动作来子类中定义。
- BeanNameAware:Aware的子接口,当设置BeanName的时候,创建通知。
- InitializingBean:这个接口作用是当Bean对象的属性都被设置完成或,可以立即做一些自定义的动作。令一个替代方案是设置init-method。
- AbstractRefreshableConfigApplicationContext:提供对容器的一些特殊设置:setConfigLocation,setBeanName,setId等。
- AbstractXmlApplicationContext:从XML读取Bean定义的容器,这个容器实现了loadBeanDefinitions方法,从XML资源中获得Bean定义。
- 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的层级结构图:
评论
2 楼
ol_beta
2012-10-12
云之遥 写道
用idea导出的类结构么,这个真不错诶..
我用myeclipse只能导出自己写的类的类图
我用myeclipse只能导出自己写的类的类图
是的,导出类图非常简单。右键想要导出类-->Diagrams 就直接生产关系了。
而且生产的图可以查看源码,显示字段和方法等。
1 楼
云之遥
2012-10-11
用idea导出的类结构么,这个真不错诶..
我用myeclipse只能导出自己写的类的类图
我用myeclipse只能导出自己写的类的类图
发表评论
-
Java压缩/解压缩二进制文件
2013-02-08 13:56 5746在Java中提供Deflater和Inflater工具类来 ... -
java常用并发工具介绍
2013-02-06 23:22 1629本文主要介绍的工具包括: CountDownLa ... -
Garbage First(G1) 日志分析工具
2012-12-22 22:35 2219G1介绍:http://softbeta.iteye.com/ ... -
Spring源码阅读——Ioc初始化过程
2012-11-20 21:52 1277以web项目启动为例,介绍一下Ioc容器的初始化。 下面这个 ... -
Spring源码阅读——获得bean
2012-10-20 20:57 3195已XmlWebApplicationContext为例,从ge ... -
生成随机数组
2012-09-11 20:23 10961.要求生成一组n位的数字,0-9...(n个)之间的稠密集合 ... -
O(1)复杂度获得栈中的极值
2012-09-09 23:47 1315设计一个栈,O(1)复杂度实现入栈,出栈,栈中最大值,栈中最小 ... -
ubuntu12.04上编译openjdk7
2012-06-13 15:31 4924获取源码 从openjdk代码仓库获取(比较慢) ... -
jinfo 查看、设置JVM参数
2012-04-25 15:36 5162用法: # jinfo -h Usage: ... -
一些参数,弥补CMS(Concurrent Mark-Sweep)收集器的缺点
2012-03-28 21:11 1686CMS缺点:http://softbeta.iteye ... -
[转载]PrintCompilation 参数解释
2012-03-27 13:59 1555英文不好,所以就不翻译了: b Blocking co ... -
《Head First 设计模式》读书笔记
2012-03-01 11:30 15501.策略模式(Strategy) ... -
解决jrobin图像中文乱码
2012-02-14 23:31 1165目前发现一种方法可以解决,做个标记。 利用字体: RrdG ... -
Java内存管理——垃圾收集概念及特点
2012-02-03 12:37 1068碎碎念,介绍Java内存管 ... -
[转载]hotspot源码(JDK7)
2012-01-19 19:25 1573源码结构图,方便理解: ├─agent ... -
跨平台获取java进程id(Process ID in Java)
2012-01-18 19:20 9170原创地址:http://blog.lichengwu.cn/ ... -
了解CMS(Concurrent Mark-Sweep)垃圾回收器
2011-12-27 20:13 121151.总体介绍: CMS(Concurrent Mark- ... -
fail-fast
2011-12-13 19:34 1050fail-fast:快速失败 一般情况下,在对集合进行迭代( ... -
利用VisualVM监视远程JVM
2011-11-17 20:06 4746VisualVM介绍 VisualVM是集成了多个JDK命令 ... -
[转载]Java 虚拟机指令
2011-10-28 20:18 8090x00 nop 什么都不做 0x01 acon ...
相关推荐
在源码层面,Spring的IoC容器通过一系列的接口和抽象类定义了IoC容器的体系结构。例如,BeanFactory接口、HierarchicalBeanFactory接口、ListableBeanFactory接口等都是BeanFactory接口的不同扩展。这些接口和抽象类...
总之,深入研究Spring Framework 4.2.x的源码,不仅可以提升对Spring的理解,还能加深对Java和软件工程整体知识体系的认识,为开发者提供宝贵的实战经验。通过结合Eclipse和Gradle工具,我们可以更有效地探索这个...
### Spring源码学习知识点 #### 一、BeanDefinition详解 ##### 1.1 BeanDefinition定义与继承体系 **BeanDefinition** 是Spring框架中一个非常重要的概念,它本质上是用来描述一个Bean(即Java对象)的配置元数据...
简单的说,在web容器中,通过ServletContext为Spring的IOC容器提供宿主环境,对应的建立起一个IOC容器的体系。其中,首先需要建立的是根上下文,这个上下文持有的对象可以有业务对象,数据存取对象,资源,事物管理...
包括内容:Spring体系结构、Spring重要接口讲解(BeanFactory继承体系、BeanDefinition继承体系、ApplicationContext继承体系)、IOC/DI(容器初始化流源码分析)、AOP原理(解析流程,代理流程,执行流程)、事务...
在实际开发中,理解Spring源码有助于优化性能、解决bug和定制功能。例如,通过了解IoC容器的工作流程,可以更有效地管理bean的生命周期;理解AOP的实现,有助于编写更灵活的切面;掌握Spring MVC的处理流程,能够...
Spring框架的体系结构主要包括以下几个部分: - **核心容器**:这是Spring框架的基础,包括BeanFactory和ApplicationContext两个主要组件。BeanFactory用于创建和管理Bean实例,而ApplicationContext则在此基础上...
Spring的体系结构由多个模块组成,可以灵活地选择所需的部分,从而降低了复杂性。 **1.1.3 Spring的体系结构** Spring框架主要分为六个部分: 1. Core Container(核心容器) - Beans:提供了BeanFactory,这是...
在Java库中,`AWT`和`Swing`图形组件体系结构就是桥接模式的例子。 9. **组合模式**:允许你将对象组合成树形结构,表现“部分-整体”的层次结构。在Java中,`TreeSet`和`TreeMap`的实现就运用了组合模式。 10. **...