beanFactory、ApplicationContext和FactoryBean的区别

image.png
image.png

1、 BeanFactory 和 ApplicationContext 的区别

spring提供了两种不同的IOC容器,为beanFactory和applicationContext,都是接口。
ApplicationContext 继承于BeanFactory 【ApplicationContext 继承ListableBeanFactory;他们都可以用来配置XML属性,已支持属性的自动注入,ListableBeanFactory继承BeanFactory 】

什么是IOC容器呢?
IOC容器是指的spring bean 工厂里面Map存储结构 (存储了bean的实例)

BeanFactory
BeanFactory是IOC容器的顶级接口,是IOC容器的最基础实现,也是访问spring容器的根接口,负责对bean的创建,访问等工作。实现类功能比较单一,BeanFactory接口实现的容器,特点是每次获取对象时才会创建对象。

ApplicationContext
继承了BeanFactory接口,拥有BeanFactory的全部功能,并且扩展了很多高级特性,每次容器启动时就会创建所有的对象。

两者状态bean的却别

  • BeanFactory:在启动的时候不会实例化bean,运行中有从容器拿bean的时候才会实例化
    延迟实例化的优点:应用启动的时候占用资源少;对资源要求较高的应用,比较有优势

  • ApplicationContext:启动的时候把所有的bean全部实例化了。海可以为bean配置lazy-init=true来让bean延迟实例化

  1. 不延迟实例化优点:所有的bean在启动的时候都加载,系统运行的速度快
  2. 在启动的时候所有的bean都加载了,我们就能在系统启动的时候,尽早的发现系统中的配置问题
  3. 建议web应用,在启动的时候把所有的bean都加载了。(把费时的操作放到操作系统启动中完成)

BeanFactory 与 FactoryBean

FactoryBean是一个bean,但不仅仅是一个bean。它是一个能生产或修饰对象生成的工厂bean,类似于设计模式中的工厂模式和装饰器模式。它能在需要的时候生成一个对象,且不仅仅限于它自身,它能返回任何bean的实例

BeanFactory :

  1. 负责生成和管理bean的一个工厂。
  2. 是IOC容器的和兴接口,职责包括:实例化、定位、配置应用程序中的对象及监理这些对象的依赖。
  3. 多种实现:如DefaultListableBeanFactory、XmlBeanFactory、ApplicationContext等,其中XmlBeanFactory就是常用的一个,该实现将以XML方式描述组成应用的对象及对象的依赖关系。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容