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延迟实例化
- 不延迟实例化优点:所有的bean在启动的时候都加载,系统运行的速度快
- 在启动的时候所有的bean都加载了,我们就能在系统启动的时候,尽早的发现系统中的配置问题
- 建议web应用,在启动的时候把所有的bean都加载了。(把费时的操作放到操作系统启动中完成)
BeanFactory 与 FactoryBean
FactoryBean是一个bean,但不仅仅是一个bean。它是一个能生产或修饰对象生成的工厂bean,类似于设计模式中的工厂模式和装饰器模式。它能在需要的时候生成一个对象,且不仅仅限于它自身,它能返回任何bean的实例
BeanFactory :
- 负责生成和管理bean的一个工厂。
- 是IOC容器的和兴接口,职责包括:实例化、定位、配置应用程序中的对象及监理这些对象的依赖。
- 多种实现:如DefaultListableBeanFactory、XmlBeanFactory、ApplicationContext等,其中XmlBeanFactory就是常用的一个,该实现将以XML方式描述组成应用的对象及对象的依赖关系。