1.BeanFactory和ApplicationContext是什么关系?
ApplicationContext:是IOC容器另一个重要接口, 它继承了BeanFactory的基本功能, 同时也继承了容器的高级功能,如:MessageSource(国际化资源接口)、ResourceLoader(资源加载接口)、ApplicationEventPublisher(应用事件发布接口)等。
2.spring中beanFactory
AbstractBeanFactory
DefaultSinglettonBeanRegistry
3.循环依赖问题(A依赖B,B依赖A)
三级缓存解决:singletonObjects、earlySingletonObjects、singletonFactories
流程:A实例化后放入singletonFactories中,初始化中发现需要加载B,此时去实例化B,初始化B的过程中发现依赖A,一次从singletonObjects、earlySingletonObjects、singletonFactories中获取A,在三次缓存中拿到A之后完成B的初始化,将B放入singletonObjects中,A拿到B的对象后进行自己的初始化。
如何避免循环依赖?
间接依赖,引入抽象类。
4.创建bean
如果不存在方法覆写,那就使用 java 反射进行实例化,否则使用 CGLIB,
方法覆写 对 lookup-method 和 replaced-method 的介绍
如果 bean 实现了 BeanNameAware、BeanClassLoaderAware 或 BeanFactoryAware 接口,回调
BeanPostProcessor 的 postProcessBeforeInitialization 回调
处理 bean 中定义的 init-method,或者如果 bean 实现了 InitializingBean 接口,调用 afterPropertiesSet() 方法
BeanPostProcessor 的 postProcessAfterInitialization 回调
在某些特殊的情况下,Bean需要实现某个功能,但该功能必须借助于Spring容器才能实现,此时就必须让该Bean先获取Spring容器,然后借助于Spring容器实现该功能。为了让Bean获取它所在的Spring容器,可以让该Bean实现ApplicationContextAware接口。
5.spring包括那些组件