`
samsongbest
  • 浏览: 164242 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spring的IOC类图

 
阅读更多

转自: http://benladeng5225.iteye.com/blog/1335623

 

spring在ioc的两个体现:一个是BeanFactory,一个是ApplicationContext。

 

一、BeanFactory

 

 

AliasRegistry: 提供了注册、删除、获得以及是否是 别名 的方法。
BeanDefinitionRegistry: 提供了注册、删除、获得以及是否包含 bean的定义 的等方法,并继承了AliasRegistry。
SimpleAliasRegistry: 实现了AliasRegistry中的方法。
SimpleBeanDefinitionRegistry: 实现了BeanDefinitionRegistry中的方法,并且继承了SimpleAliasRegistry。
SingletonBeanRegistry: 提供了注册、获得以及是否包含 此beanName的单例对象 的等方法。
DefaultSingletonBeanRegistry: 实现了SingletonBeanRegistry中的方法,并提供了删除 beanName的单例对象 的方法,
这里面还提供了bean的依赖bean、内部类bean,以及一次性bean的的注册和获得方法。
另外destroySingleton(String beanName)除了删除此 beanName的单例对象,还会删除
依赖bean、内部类bean,以及一次性bean。
另外,继承了SimpleAliasRegistry。
FactoryBeanRegistrySupport: FactoryBean既是bean,又是一个factory,可以从中获取bean的对象。继承了DefaultSingletonBeanRegistry。
BeanFactory: 提供了获取bean,判断是否包含此bean,判断此bean是否是单例或多例,获取别名,获取Class对象的方法。
从用户角度来说,获取bean是重要的,而创建bean并不是必须的,因为创建bean可以在获取bean的时候再创建。
HierarchicalBeanFactory: 提供了获得父亲beanFactory,判断是否包含此bean的方法。继承BeanFactory。
AutowireCapableBeanFactory: 提供了创建bean,装载bean,初始化bean的方法。继承BeanFactory。
ListableBeanFactory: 提供了与BeanDefinition相关属性的方法。继承BeanFactory。通过一定查找列出所有bean的方法, 我想这是为什么名字里面有list吧
AbstractBeanFactory: 提供了获取bean的实现和其他一些方法。
AbstractAutowireCapableBeanFactory: 提供了创建bean的实现和其他一些方法。
DefaultListableBeanFactory: 提供了BeanDefinitionRegistry、ListableBeanFactory中方法的实现和其他一些方法。
XmlBeanFactory: 包含一个XmlBeanDefinitionReader,对xml的配置文件进行解析。

 

分析:
1. spring中类的命名一般和类中的主要方法的定义吻合,可以理解为一个具备这个行为的东东。从上面来看,有些类一看就符合这一点。有几个类需要多看两 眼,并且分析一下。比如:ListableBeanFactory、DefaultListableBeanFactory、 AbstractBeanFactory。ListableBeanFactory翻译成中文是可列表,可枚举的工厂,而枚举bean的话就需要从 BeanDefinition中获取Class type,所以这个类还提供了和BeanDefinition相关属性的方法,而DefaultListableBeanFactory实现了 ListableBeanFactory的同时还实现了BeanDefinitionRegistry就是这个原因。 AbstractBeanFactory是因为实现了BeanFactory中的方法,就是获取bean的方法。
2. 以上类的继承关系还是比较清晰的,基本上每个类的命名和它里面的方法能够很好的对应起来。但是虽然我想把类图画的比较清晰,不发生交叉,还是发生了交叉。 为了没有交叉,我的建议是把ConfigurableListableBeanFactory这个接口废弃掉,把它的方法抽取到它上面的接口中去,让 DefaultListableBeanFactory直接实现ListableBeanFactory,这样避免了交叉。不过也许 ConfigurableListableBeanFactory这个类有它的深义。 

 

 二、ApplicationContext

 

 

 

 

ApplicationEventPublisher: 提供发布事件的方法。
MessageSource: 提供了根据Locale获取信息的方法。国际化的作用。
ResourceLoader: 资源加载器,提供根据地址获取资源的方法。
ResourcePatternResolver: 提供了根据对应的资源描述的样式获取对应的资源数组。
DefaultResourceLoader: 实现了ResourceLoader。
Lifecycle: 提供了生命周期相关的开始、结束以及判断是否在运行中方法。
DisposableBean: 提供了bean被销毁时释放资源的方法。
BeanNameAware: 提供了把bean的name放到bean中的方法,因此要被beans实现。
InitializingBean: 提供了bean属性全部设置后执行的方法,要被beans实现。
ApplicationContext: 除继承ListableBeanFactory、HierarchicalBeanFactory、MessageSource、ApplicationEventPublisher、
ResourcePatternResolver外,还提供了获得AutowireCapableBeanFactory的方法。
ConfigurableApplicationContext: 提供了增加beanFactory后处理、增加应用监听器、刷新的方法,还提供了获得
ConfigurableListableBeanFactory的方法。继承ApplicationContext、Lifecycle。
WebApplicationContext: 提供了获得servletContext的方法,继承ApplicationContext。
ConfigurableWebApplicationContext: 继承WebApplicationContext、ConfigurableApplicationContext外,还提供了一些方法。
AbstractApplicationContext: 实现了ApplicationContext中获得AutowireCapableBeanFactory的方法。并且实现了其他一些方法。
增加了三个抽象的方法refreshBeanFactory()、closeBeanFactory()、以及返回类型为
ConfigurableListableBeanFactory的getBeanFactory()。
AbstractRefreshableApplicationContext: 实现了AbstractApplicationContext中的refreshBeanFactory()、getBeanFactory()方法。
增加了loadBeanDefinitions(DefaultListableBeanFactory beanFactory)的抽象方法。
AbstractRefreshableConfigApplicationContext: 提供了对configLocation的set、get操作。继承AbstractRefreshableApplicationContext,
并提供了对于BeanNameAware、InitializingBean的实现。
GenericApplicationContext: 实现了AbstractApplicationContext中的refreshBeanFactory()、getBeanFactory()方法。增加了返回类型为
DefaultListableBeanFactory的getDefaultListableBeanFactory()方法。并实现了BeanDefinitionRegistry。
ResourceAdapterApplicationContext: 提供了一个JCA ResourceAdapter的实现方法。
StaticApplicationContext: 提供了注册单例bean、多例bean的方法,最终的注册是通过getDefaultListableBeanFactory()实现的,还提供了
增加国际化信息的方法。
AbstractXmlApplicationContext: 提供了loadBeanDefinitions方法。
FileSystemXmlApplicationContext: 在构造器里用方法描述加载的过程。
ClassPathXmlApplicationContext: 在构造器里用方法描述加载的过程,并提供了从ClassPath寻找资源,并加载的构造器方法。
StaticWebApplicationContext: 提供了postProcessBeanFactory,即Register request/session scopes的方法。
AbstractRefreshableWebApplicationContext: 提供了postProcessBeanFactory和onRefresh方法。
XmlWebApplicationContext: 提供了loadBeanDefinitions方法。
分享到:
评论

相关推荐

    Spring 容器类图.vsdx

    整理Spring IOC容器的存储结构类图,可以方便的观看类图,结合每个Spring IOC容器组件功能描述,整体把握Spring容器的设计基本思想

    Spring、JPA、类图等的Java软件开发工具(高分项目).zip

    它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 2. Spring MVC框架:Spring MVC是基于Spring框架的...

    Spring原理解析-BeanFactory—容器加载过程解析

    Spring的IOC容器—BeanFactory—容器加载过程解析容器加载DefaultListableBeanFactory类介绍BeanFactory接口介绍BeanDefinition接口介绍BeanDefinitionRegistry接口介绍如何解析xml文件 容器加载 ...

    基于J2EE架构的生产管理系统设计

    系统基于B/S 多层Web 体系结构,在J2EE 平台上利用...用Spring 的IOC 和AOP 技术对持 久层和业务逻辑层对象进行管理,为web 应用提供事务管理等基础服务。在表示层 使用了J2EE 新兴框架JSF,实现高效灵活的web 端开发。

    java-ee电子商城系统课程设计.doc

    Spring作为核心,向上整合MVC框架,使用Spring的IoC容 器来管理各组件之间之间的依赖关系,Spring的声明事务将负责逻辑层组件的事务管理 。而Hibernate 提供了一个抽象的数据服务视图,将用户对数据库的访问进行高度...

    2023年java面试资料整理.doc

    3. Spring 的基本概念:IoC、AOP、MVC 4. Spring 的应用场景:依赖注入、面向方面编程、Web 应用开发 数据结构 & 算法 & 计算机基础 1. 数据结构:数组、链表、栈、队列、树、图 2. 算法:排序算法、搜索算法、图...

    1、spring源码解析之概况流程

    核心类AnnotationConfigApplicationContext的类图结构5.跟踪源码进入ioc 概要 ​ 以前总是很忙,没有时间写博客,现在挤出时间写一些总结性及实用性的博客。 ​ 首先聊一下,之所以开始看源码,是因为随着自身对...

    毕业论文ssm429在线画展系统的设计与实现+vuessm429在线画展系统的设计与实现+vue+论文.doc

    Spring框架本身则通过依赖注入(DI)和控制反转(IOC)理念,使得对象之间的依赖关系得以解耦,便于管理和维护。同时,它还支持面向切面编程(AOP),允许开发者定义关注点分离,提高代码的可重用性和模块化。 ...

    软件工程设计模式基础.pdf

    设计模式的应用不仅限于以上提到的几种,例如,Spring框架中大量使用了依赖注入(IoC)和面向切面编程(AOP)等模式,这些模式使得组件之间的耦合度降低,提高了系统的灵活性和可测试性。在实际开发中,理解并灵活...

    asp.net知识库

    技术基础 New Folder 多样式星期名字转换 [Design, C#] .NET关于string转换的一个小Bug Regular Expressions 完整的在.net后台执行javascript脚本集合 ASP.NET 中的正则表达式 常用的匹配正则表达式和实例 ...

Global site tag (gtag.js) - Google Analytics