spring中两种容器的总结和对比

本文深入解析Spring框架中的IOC容器概念,包括BeanFactory和ApplicationContext两大核心容器。探讨它们之间的区别,如实例化时机、功能特性等,并介绍如何通过配置实现延迟实例化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SpringIOC容器是一个IOC Service Provider。提供了两种容器类型:BeanFactory和ApplicationContext。

Spring的IOC容器是一个提供IOC支持的轻量级容器。除了基本的ioc支持,它作为轻量级容器还提供了IOC之外的支持。

BeanFactory:BeanFactory是spring中提供的最简单最基本的容器;这个容器只提供了IOC/DI的功能;这个容器中最主要个方法就是getBean()方法;

通常我们会使用xmlBeanFactory对象创建容器:XmlBeanFactory就是针对最基本的ioc容器的实现,这个IOC容器可以读取XML文件定义的BeanDefinition(XML文件中对bean的描述);

我们一般使用的是Spring提供的功能更加全面的ApplicationContext;

ApplicationContext:是一个功能更加全面的容器,

一般我们直接使用这个容器;

ApplicationContext接口继承了BeanFactory接口,所以,ApplicationContext实现了getBean方法;

2,提供了额外的功能:    

1,环境感知;    

2,容器的继承体系;    

3,国际化相关;    

4,事件发布/响应机制;    

5,统一的资源管理;  

6,AOP的功能;

 

关于二者实例化时机的区别:

beanfactory容器:容器在启动的时候,并不会实例化bean,只有当用户调用getBean()方法的时候才会对配置好的bean进行实例化;

ApplicationContext容器:当容器启动之后,容器就已经实例化好了所有配置的bean;

如何延迟实例化:

对于ApplicationContext容器启动便进行实例化bean,我们可以通过以下的两种方式来延迟实例化:

1,可以在bean元素配置lazy-init=true来让bean延迟实例化;    

2,可以在beans元素配置default-lazy-init=true来让这个beans里面所有的bean延迟实例化;

 

对比延迟实例化和非延迟实例化:

1,延迟实例化:在系统启动的时候快,系统启动的时候占用的资源少;并且,如果在使用的时候再去加载对象,第一次使用的时候性能较低;因为不会在加载的时候去实例化对象,所以延迟实例化不能对实例化出来的对象做更多的功能;

2,非延迟实例化:在系统启动的时候,所有对象被实例化,启动速度慢,使用速度快,启动的时候占用较多系统资源;

如何选择:

1,对于系统资源较少的应用可以使用延迟实例化(移动应用);

2,对于web应用来说,一般选择迫切实例化;

3,在web应用里面,我们一般把比较耗时的事情放在系统启动的时候完成;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值