nealmind's Blog

Spring源码BeanFactory和ApplicationContext区别

2020-05-10
neal

BeanFactory和ApplicationContext区别:

ApplicationContext是BeanFactory的子接口,对BeanFactory进行了一定的扩展,增加了:

  • MessageSource,提供国际化的消息访问
  • 继承了ResourceLoader,支持资源访问
  • 提供了Bean的自动装配
  • 提供了各种应用层的Context实现

例如,构建BeanFactory时,不会实例化bean,只有调用其getBean方法时,才会对bean进行实例化;

而构建ApplicationContext时,会调用AbstractApplicationContext的refresh方法进行BeanDefinition的注册和bean的实例化;其中,BeanDefinition的注册是由两个子类AbstractRefreshableApplication和AnnotationConfigApplicationContext实现的,分别对应xml的加载和基于注解的加载;xml是在刷新方法中进行BeanDefinition解析,基于注解的是在调用刷新方法之前解析;

BeanFactory和ApplicationContext的区别在于:

对于singleton的bean,BeanFactory只有在使用bean时(调用getBean)才会进行实例化,节省内存,类似于懒加载;

ApplicationContext相反,是在构建容器后就进行实例化,优点是加载迅速;


***************************************************************

基于个人学习总结,如有错误,请留言告知,谢谢.


Similar Posts


上一篇 Spring循环依赖

Content