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
分享到:
相关推荐
spring ioc容器初始化流程图 spring ioc容器依赖注入流程图 spring aop实现原理流程图
spring ioc指的是控制反转,IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。交由Spring容器统一进行管理,从而实现松耦合
springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC...
spring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demo...
SpringIoc示例代码,SpringIoc示例代码,SpringIoc示例代码,SpringIoc示例代码
spring Ioc容器配置 IOC容器数据源配置 <!-- 配置数据源 --> destroy-method="close"> <value>org.gjt.mm.mysql.Driver <value>jdbc:mysql://localhost:3306/demo <value>root ...
以注解方式模拟Spring IoC AOP,了解Spring是如何实现的.
主要为大家详细解析了Spring中IoC优点与缺点,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
spring ioc思维导图,让自己快速、详尽地了解spring ioc知识。
Spring ioc Spring ioc
详细讲解了springioc的各种注入方式以及对应的java方式。讲解了springioc和DI的区别,以及注入特殊复杂的属性
Spring IOC设计原理解析.docx
Spring IoC加载流程讲解以及IoC思想和依赖倒置原则
这是spring_ioc部分的内容。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。...
迷你书是《Spring揭秘》的精选版,节选了原书中介绍Spring IoC容器的6个章节。《Spring揭秘》以幽默生动的语言、辅以有趣的故事和典故,循循善诱地阐述了Spring框架的方方面面。针对Spring框架的主要功能以及开发者...
控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找...
这是个模拟spring ioc的学习例子,是个java工程。有助于对aop和ioc的理解
SpringIOC经典Demo,绝对的经典.
spring的ioc容器详细讲解,理解springioc容器
Spring Ioc 注解 依赖注入