ApplicationContext 接口容器
ApplicationContext 用于加载 Spring 的配置文件,在程序中充当“容器”的角色。其实现
类有两个。通过 Ctrl +T 查看:
这里写图片描述
A 、配置文件在类路径下
若 Spring 配置文件存放在项目的类路径下,则使用 ClassPathXmlApplicationContext 实现类进行加载。
这里写图片描述
B 、配置文件在本地目录中
若 Spring 配置文件存放在本地磁盘目录中,则使用 FileSystemXmlApplicationContext 实现类进行加载。
这里写图片描述
C 、配置文件在项目根路径下
若 Spring 配置文件存放在项目的根路径下,同样使用 FileSystemXmlApplicationContext实现类进行加载。
下面是存放在项目根路径下的情况,该配置文件与 src 目录同级,而非在 src 中。
这里写图片描述

这里写图片描述

BeanFactory 接口 容器
BeanFactory 接口对象也可作为 Spring 容器出现。BeanFactory 接口是 ApplicationContext接口的父类。
这里写图片描述
若要创建 BeanFactory 容器,需要使用其实现类 XmlBeanFactory (Ctrl+T 查看继承关系)。
该类可以加载 Spring 配置文件。
这里写图片描述
而 Spring 配置文件以资源 Resouce 的形式出现在 XmlBeanFactory 类的构造器参数中。
Resouce 是一个接口,其具有两个实现类:
ClassPathResource:指定类路径下的资源文件
FileSystemResource:指定项目根路径或本地磁盘路径下的资源文件。
这里写图片描述
在创建了 BeanFactory 容器后,便可使用其重载的 getBean()方法,从容器中获取指定的Bean 对象。
这里写图片描述

这里写图片描述

两个接口容器的区别
虽然这两个接口容器所要加载的 Spring 配置文件是同一个文件,但在代码中的这两个容器对象却不是同一个对象,即不是同一个容器:它们对于容器内对象的装配(创建)时机是不同的。
装配时机测试时需要注意,首先要在容器中对象 StudentServiceImpl 类的无参构造器中添加一个输出语句,以显示其是否执行。
这里写图片描述
A 、ApplicationContext 容器中对象的装配时机
ApplicationContext 容器,会在容器对象初始化时,将其中的所有对象一次性全部装配好。
以后代码中若要使用到这些对象,只需从内存中直接获取即可。执行效率较高。但占用内存。
这里写图片描述
B 、BeanFactory 容器中对象的装配时机
BeanFactory 容器,对容器中对象的装配与加载采用延迟加载策略,即在第一次调用getBean()时,才真正装配该对象。
这里写图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐