`
ylsun1113
  • 浏览: 28395 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

从spring的ioc类图看spring的ioc设计

阅读更多

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。
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方法。

 

 

三、把两个合二为一

  • 大小: 118.6 KB
  • 大小: 258.8 KB
  • 大小: 391.3 KB
分享到:
评论

相关推荐

    springIoc实现原理

    在传统的软件设计中,对象的创建和依赖关系的维护通常由代码自身来完成,而在Spring Ioc中,这些控制权被反转给了Spring容器,使得对象的生命周期管理和依赖注入变得更为灵活和可扩展。 **一、控制反转(IoC)概念*...

    spring源码全部uml类图

    在"spring源码全部uml类图"中,我们可以深入探讨Spring框架的内部结构和设计模式。 首先,Spring框架的核心组件包括IoC(Inversion of Control,控制反转)容器和AOP(Aspect-Oriented Programming,面向切面编程)...

    实验一 Springioc基本操作.docx

    SpringIOC是Spring Framework中的核心组件之一,负责管理应用程序中的对象、依赖关系和生命周期。 在 Spring IOC 中,对象的创建和管理是通过 BeanFactory 或 ApplicationContext 实现的。BeanFactory 是 Spring ...

    spring ioc和aop原理流程图(详细)

    **控制反转(IOC)** 是一种设计模式,它将对象的创建和管理职责从应用代码中分离出来,转交给外部容器负责。在Spring框架中,这个外部容器就是**IOC容器**。以下是Spring IOC容器的主要知识点: 1. **Bean的定义**...

    springIOC手写框架分析

    springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC...

    spring ioc模块手写demo

    spring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demo...

    Spring中IoC优点与缺点解析

    IoC(Inversion of Control)是 Spring 框架中的一种设计模式,它的主要思想是将对象的创建和管理交给容器,从而解耦合对象之间的依赖关系。今天,我们将详细解析 IoC 的优点和缺点。 优点 1. 简化对象的创建:IoC ...

    Spring IoC加载流程讲解

    IoC(Inversion of Control)是指在软件设计中,将对象实例的控制权从代码控制剥离到容器控制。这样做的目的是为了降低耦合度,提高系统的灵活性和可维护性。在 Spring 中,我们使用 XML 文件来配置对象实例的创建和...

    SpringIoc示例代码

    Spring IOC,全称Inversion of Control,即“控制反转”,是Spring框架的核心特性之一。在传统的Java应用程序中,对象的创建和管理通常由开发者自己控制。而在Spring IOC中,这种控制权被反转,对象的创建、初始化、...

    spring Ioc容器配置

    spring Ioc容器配置 IOC容器数据源配置 <!-- 配置数据源 --> destroy-method="close"> <value>org.gjt.mm.mysql.Driver <value>jdbc:mysql://localhost:3306/demo <value>root ...

    spring ioc

    标题 "Spring IOC" 描述了我们讨论的核心主题——Spring 框架中的依赖注入(Inversion of Control,简称 IOC)机制。Spring 是一个广泛应用的 Java 应用开发框架,其核心特性之一就是IOC,它极大地简化了软件组件...

    spring ioc思维导图源文件

    Spring IOC(Inversion of Control,控制反转)是Spring框架的核心特性之一,它允许开发者将对象的创建和管理交给Spring容器来处理,从而使代码更加松耦合,更易于测试和维护。下面将详细介绍Spring IOC的基本概念、...

    springioc和spring aop

    在传统的程序设计中,对象通常会自行创建或查找其依赖的对象,而IoC则是将这种控制权反转,将依赖关系的创建和管理交给了外部容器(在Spring框架中是ApplicationContext)。这样,对象不再负责创建和管理依赖,而是...

    Springioc注入Demo

    Spring IOC和DI的区别在于,IOC是一种设计思想,强调的是控制权的转移,而DI是实现这一思想的具体方式,即通过外部容器来管理对象的依赖关系。理解这两者的关系有助于我们更好地设计和实现面向对象的应用。 在实际...

    SpringIOC经典Demo

    Spring IOC(Inversion of Control,控制反转)是Spring框架的核心特性,它极大地简化了Java应用的开发,通过将对象的创建和管理交由Spring容器来处理,开发者可以更专注于业务逻辑。下面,我们将深入探讨Spring IOC...

    Spring IOC.pdf

    总结来说,Spring IOC操作和设计模式是Spring框架最核心的部分之一,它们帮助开发者将对象之间的依赖关系交由Spring容器管理,实现了业务逻辑的松耦合,提高了代码的可维护性和可测试性。通过理解和运用Spring IoC...

    以注解方式模拟Spring IoC AOP

    在Spring框架中,依赖注入(Inversion of Control, IoC)和面向切面编程(Aspect Oriented Programming, AOP)是两大核心特性。本篇将深入探讨如何通过注解方式来模拟Spring的这两种机制,帮助你理解其底层原理。 #...

    Spring IoC依赖包

    它是一种设计模式,改变了传统程序中的对象创建和管理的方式,将对象的生命周期管理交由Spring容器来负责,使得代码更加解耦,提高了组件的可重用性和测试性。 在Spring IoC中,有四个核心的jar包构成了开发的最小...

    Spring IoC源码深度剖析开源架构源码2021.pdf

    标题《Spring IoC源码深度剖析开源架构源码2021.pdf》和描述《Spring IoC源码深度剖析开源架构源码2021.pdf》表明该文档主要面向于分析Spring框架中控制反转(IoC)容器的核心源码,解析和理解其内部的工作机制及...

    Spring IOC设计原理解析.docx

    Spring IOC(Inversion of Control,控制反转)设计原理解析 一、什么是IOC/DI? IOC,即控制反转,是软件设计模式中的一种,它将对象的创建和管理权交给了框架,而不是由对象自身负责。DI(Dependency Injection,...

Global site tag (gtag.js) - Google Analytics