今天在看Springboot源码的时候,调试发现AnnotationConfigServletWebServerApplicationContext 中 DefaultListableBeanFactory,一直对BeanFactory 存在好骑,百度发现,BeanFactory 接口的实现类DefaultListableBeanFactory贯穿了IOC容器的使用,因此决定研究研究这个BeanFactory 。
类关系图如下:
一个个分析:
DefaultListableBeanFactory的创建:
构造方法中直接调用了父类的构造方法,直接看父类:
这里一直追溯了所有DefaultListableBeanFactory创建的时候,构造函数中执行的方法,只有目前下边这三句有效的,可以看见,这里只是添加了一些需要忽略的依赖和自动装配时的检查,到此,DefaultListableBeanFactory的创建就梳理完了
public AbstractAutowireCapableBeanFactory() {
super();
ignoreDependencyInterface(BeanNameAware.class);
ignoreDependencyInterface(BeanFactoryAware.class);
ignoreDependencyInterface(BeanClassLoaderAware.class);
}
其实在创建的过程中,可理解为,是一个基础的BeanFactory ,同时添加了一些基本的依赖项
但是这里罗列下,这个BeanFactory 的一些特点和功能:
既然谈及功能,直接分析实现的接口是最直接的:
实现接口:
。。。。
好吧 这些接口也太多了吧,感觉分析不过来了。
总之, 在springBoot的容器中,使用的BeanFactory 就是 DefaultListableBeanFactory 这个对象的实例。