0%

spring容器

spring容器

  • BeanFactory 该接口是最简单的容器,提供了基本的DI支持。最常用的BeanFactory实现是XmlBeanFactory类,根据XML文件中的定义加载bean,从XML文件读取配置元数据并用它去创建一个完全配置的系统或应用

  • ApplicationContext应用上下文 基于BeanFactory之上构建,提供面向应用的服务,并继承了资源,消息,事件,环境,工厂五种能力常见的实现方式

    1
    2
    public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory,
    MessageSource, ApplicationEventPublisher, ResourcePatternResolver

ApplicationContext是一个接口,大部分的方法实现由AbstractApplicationContext实现

  • ClassPathXmlApplicationContext 从类路径下的XML配置文件中加载上下文定义,把应用上下文定义文件当做资源

    1
    ApplicationContext  context = new ClassPathXmlApplicationContext("application.xml");
    • FileSystemXmlApplicationContext 读取文件系统下的XML配置文件并加载上下文定义

    • XmlWebApplicationContext 读取Web应用下的XML配置文件并装载上下文

    • AnnotationConfigApplicationContext: 注解方式

ConfigurableApplicationContext扩展于ApplicationContext接口,新增了两个主要的方法,refresh()和close(),让ApplicationContext具有启动、刷新和关闭上下文的能力

WebApplicationContext专门为WEB应用准备的,允许从相对于WEB根目录的路径中初始化上下文

spring容器

BeanFactory和ApplicationContext的区别

BeanFactory可以认为是bean集合的工厂类,包含了各种bean的定义,以便在接收到客户端请求时将对应的bean实例化,是spring最底层的接口,提供了最简单的容器的功能

ApplicationContext继承了BeanFactory并增加了其他的功能,在初始化上下文时就实例化所有**单例**的bean,提供了支持国际化的文本消息、统一的资源文件读取方式、消息发送、事件机制等

  • BeanFactory采用的是延迟加载形式来注入Bean的,即只有在使用到某个Bean时(调用getBean()),才对该Bean进行加载实例化,这样,我们就不能发现一些存在的Spring的配置问题。而ApplicationContext则相反,它是在容器启动时,一次性创建了所有的Bean。这样,在容器启动时,我们就可以发现Spring中存在的配置错误。相对于基本的BeanFactory,ApplicationContext 唯一的不足是占用内存空间。当应用程序配置Bean较多时,程序启动较慢。

  • BeanFactory和ApplicationContext都支持BeanPostProcessor、BeanFactoryPostProcessor的使用,但两者之间的区别是:BeanFactory需要手动注册,而ApplicationContext则是自动注册。

  • BeanFactory主要是面对与 spring 框架的基础设施,面对 spring 自己。而 ApplicationContext 主要面对与 spring 使用的开发者。基本都会使用 ApplicationContext 并非 BeanFactory 。