Spring源码阅读IOC——DefaultListableBeanFactory

目的:

  • 掌握 DefaultListableBeanFactory 的功能和实现逻辑
  • 掌握 DefaultListableBeanFactory 的设计原理 和 设计方法
  • 掌握 DefaultListableBeanFactory  开发过程 

一、功能 和 实现逻辑

功能: 实现容器的加载(IOC过程: 容器的加载 -  xml配置文件及资源文件读取 - bean实例化注册 - IOC的应用)
            容器:bean工厂,用来存储业务中的bean对象

在《Spring 源码深度解析》中,只讲了DefaultListableBeanFactory 的父类及实现的接口。如下图
Spring源码阅读IOC——DefaultListableBeanFactory_第1张图片

类功能如下,这很难理解

xmlBeanFactory继承DefaultListableBeanFactory。
AliasRegistry:定义对alias的简单增删改等操作
SimpleAliasRegistry:主要使用map作为alias的缓存,并对接口AliasRegistry接口进行实现。
SingletonBeanRegistry:定义对单例的注册及获取。
BeanFactory:定义获取bean及bean的各种属性。
DefaultSingletonBeanRegistry:对接口SingletonBeanRegistry各函数的实现。
HierarchicalBeanFactory:继承了BeanFactory,也就是在BeanFactory定义的功能的基础上增加了对parentFactory的支持。
ConfigurableBeanFactory:提供配置factory的各种方法。
ConfigurableListableBeanFactory:BeanFactory配置清单,指定忽略类型及接口。
 

所以,我去看了spring 源码中 DefaultListableBeanFactory  类,并且找到了开发人员的DefaultListableBeanFactoryTests单元测试类。

我想通过 了解 测试用例的方式来 掌握这个类的整个功能 及实现的思想。这也是《测试驱动开发》的思想

在DefaultListableBeanFactoryTests 中的121个测试用例,对这些用例做功能上的分类和总结

用例1: 

testUnreferencedSingletonWasInstantiated   测试未引用的单例已实例化
        KnowsIfInstantiated.clearInstantiationRecord();
		DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
		Properties p = new Properties();
		p.setProperty("x1.(class)", KnowsIfInstantiated.class.getName());
		assertTrue("singleton not instantiated", !KnowsIfInstantiated.wasInstantiated());
		(new PropertiesBeanDefinitionReader(lbf)).registerBeanDefinitions(p);
		lbf.preInstantiateSingletons();
		assertTrue("singleton was instantiated", KnowsIfInstantiated.wasInstantiated());

解析:
(new PropertiesBeanDefinitionReader(lbf)).registerBeanDefinitions(p); lbf.preInstantiateSingletons();

测试通过PropertiesBeanDefinitionReader的方式,是否能正确实例化对象

收获:通过读取properties文件来实例化对象,如:mysql驱动,log日志类等

 

 

 

 

 

 

 

你可能感兴趣的:(spring源码)