Spring接口容器加载配置文件

去年记得有一次面试,提问Spring装载Bean和初始化的问题,回答的并不好。重新整理下思路。

首先先从加载Spring配置文件说起。

1     ApplicationContext  接口容器

ApplicationContext 接口用于加载Spring配置文件,实现类为ClassPathXmlApplicationContext  和  FileSystemXmlApplicationContext,如下图:

a、配置文件在类路径下

b、配置文件在本地目录

c、配置文件在项目跟路径下

2     BeanFactory 接口容器

BeanFactory 接口是 ApplicationContext接口的父类

一般使用 XmlBeanFactory 实现类 加载 Spring 配置文件

XmlBeanFactory的结构:

参数Resource 是接口,有两个实现类:

ClassPathResource : 指定类路径下的资源文件
FileSystemResouce : 指定项目根路径或本地磁盘路径下的资源文件

在创建了 BeanFactory 容器后,通过使用 getBean() 方法,从容器中获得指定的 Bean 对象

编写测试代码举例(spring配置文件我放在了src/resource目录下):

 

3     两个接口容器的区别

区别的本文的重点,也是之前面试的答案。

ApplicationContext 容器 和 BeanFactory 容器 加载的是同一个配置文件,但在代码中这两个容器对象,不是同一个他们对于容器内对象装配时机是不同的。

     a、ApplicationContext 容器中对象的装配时机

     ApplicationContext  容器,会在容器对象初始化时,将其中的所有对象一次性装配好,之后可以直接从内存中获得对象,执行效率高,占用内存。

     b、BeanFactory 容器中对象的装配时机

     BeanFactoy  容器,对容器中的对象的装配与加载采用延迟加载策略,只有在第一次真正调用 getBean() 时,才真正装配该对象。

当然 Bean 本身的装配方式也 值得一说,先挖个坑~~~