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

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中两种容器的总结和对比_第1张图片

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

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

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

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

2,提供了额外的功能:    

1,环境感知;    

2,容器的继承体系;    

3,国际化相关;    

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

5,统一的资源管理;  

6,AOP的功能;

spring中两种容器的总结和对比_第2张图片

 

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

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应用里面,我们一般把比较耗时的事情放在系统启动的时候完成;

 

你可能感兴趣的:(框架学习,spring,容器,beanfactory)