ApplicationContext 和 BeanFactory 都可以获取 Bean,它们之间的关系?
回答·6
最热
最新
- ApplicationContext 继承 BeanFactory 接口,前者启动的时候就实例化所有的 bean,后者从容器中拿才会实例化
- 补充:BF 为懒加载,也就是延迟加载,当调用 get Bean()时会加载当前实例;这样加载存在的问题:初始化时无法检验配置信息是否存在错误,只有调用时才会发现配置信息错误 AC 会一次性加载全部实例,所以占用空间较大;全部加载实例会在加载时就检验配置信息,避免了在程序调用时出现错误。
- BeanFactory 和 ApplicationContext 是 Spring 的两大核心接口,都可以当做 Spring 的容器。其中 ApplicationContext 是 BeanFactory 的子接口。 BeanFactory:是 Spring 里面最底层的接口,包含了各种 Bean 的定义,读取 bean 配置文档,管理 bean 的加载、实例化,控制 bean 的生命周期,维护 bean 之间的依赖关系。 ApplicationContext 接口作为 BeanFactory 的派生,除了提供 BeanFactory 所具有的功能外,还提供了更完整的框架功能: 继承 MessageSource,因此支持国际化。 统一的资源文件访问方式。 提供在监听器中注册 bean 的事件。 同时加载多个配置文件。 载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的 web 层
- BeanFactory 只提供了实例化对象和拿对象的功能,ApplicationContext 继承 BeanFactory 接口,它是 Spring 的一各更高级的容器,如访问资源\消息发送\aop 等,另外,二者在 bean 的加载方式也是有区别的
- 所以你们都回答的这么骚的么 我只知道 beanfactory 只能获取 bean 而另一个能初始化整个注册扫描操作
- 前者的初始化会浪费一定的时间比较慢,它在初始化上下文的时候,都会实例化,所有的单利 bean。后者的话,是你用到的某个 bean,才会被实例化