《Spring揭秘》笔记——Spring中两种容器比较

来源:互联网 发布:数字图像处理 知乎 编辑:程序博客网 时间:2024/05/28 20:20

Spring提供了两种容器类型:BeanFactory和ApplicationContext。

  • BeanFactory:基础类型IoC容器,提供完整的IoC服务支持。如果没有特殊指定,默认采用延迟初始化策略(lazy-load)。只有当客户端对象需要访问容器中的某个受管对象的时候,才对该受管对象进行初始化以及依赖注入操作。所以,相对来说,容器启动初期速度较快,所需要的资源有限。对于资源有限,并且功能要求不是很严格的场景,BeanFactory是比较合适的IoC容器选择。

  • ApplicationContext:ApplicationContext在BeanFactory的基础上构建,是相对比较高级的容器实现,除了拥有BeanFactory的所有支持,ApplicationContext还提供了其他高级特性,比如事件发布、国际化信息支持等,这些会在后面详述。ApplicationContext所管理的对象,在该类型容器启动之后,默认全部初始化并绑定完成。所以,相对于BeanFactory来说,ApplicationContext要求更多的系统资源,同时,因为在启动时就完成所有初始化,容器启动时间较之BeanFactory也会长一些。在那些系统资源充足,并且要求更多功能的场景中,ApplicationContext类型的容器是比较合适的选择。

简而言之:ApplicationContext有BeanFactory的所有功能,并对其进行了扩展,官方推荐使用ApplicationContext。除非是在一些特殊情况,比如程序运行在资源有限的设备中,内存消耗非常关键,额外的数千字节也会有影响,这种情况可以考虑使用BeanFactory。使用BeanFactory的另一个缺点是Spring大量使用了BeanPostProcessor,如果只使用一个普通的BeanFactory,那么大量的支持,例如事务和AOP将不会生效。这种情况可能会令人困惑,排查起来也比较麻烦,因为配置中没有任何错误。

阅读全文
0 0