7.4.1 Spring容器
Spring
容器最基本的接口就是BeanFactory
。 BeanFactory
负责配置、创建、管理Bean
,它有一个子接口:ApplictionContext
,也被称为Spring
上下文。 Spring
容器还负责管理Bean
与Bean
之间的依赖关系。
BeanFactory接口方法
BeanFactory
接口包含如下几个基本方法。
方法 | 描述 |
---|---|
boolean containsBean(String name) |
判断Spring 容器是否包含id 为name 的Bean 实例。 |
<T> T getBean(Class<T> requiredType) |
获取Spring 容器中属于requiredType 类型的、唯一的Bean 实例。 |
Object getBean(String name) |
返回容器id为name 的Bean 实例。 |
<T> T getBean(String name,Class requiredType) |
返回容器中id 为name ,并且类型为requiredType 的Bean 。 |
Class<?> getType(String name) |
返回容器中id 为name 的Bean 实例的类型。 |
调用者只需使用getBean()
方法即可获得指定Bean
的引用,无须关心Bean
的实例化过程。Bean
实例的创建、初始化以及依赖关系的注入都由Spring
容器完成BeanFactory
常用的实现类是DefaultListableBeanFactory
ApplicationContext接口
ApplicationContext
是BeanFactory
的子接口,因此功能更强大。对于大部分Java EE
应用而言,使用ApplicationContext
作为Spring
容器更方便。
- 其常用实现类是
FileSystemXmlApplicationContext
、ClassPathXmlApplicationContext
和AnnotationConfigApplicationContext
。 - 如果在
Web
应用中使用Spring
容器,则通常有XmlWebApplicationContext
、AnnotationConfigWebApplicationContext
两个实现类。
创建Spring
容器的实例时,必须提供Spring
容器管理的Bean
的详细配置信息。 Spring
的配置信息通常采用XML
配置文件来设置,因此,创建BeanFactory
实例时,应该提供XML
配置文件作为参数,XML
配置文件通常使用Resource
对象传入。
Resource接口
Resource
接口是Spring
提供的资源访问接口,通过使用Resource
接口, Spring
能以简单、透明的方式访问磁盘、类路径以及网络上的资源。
大部分Java EE
应用,可在启动web
应用时自动加载ApplicationContext
实例,接受Spring
管理的Bean
无须知道ApplicationContext
的存在,一样可以利用ApplicationContext
的管理。
实例化BeanFactory
对于独立的应用程序,可通过如下方法来实例化BeanFactory
.
1 | //搜索类加载路径下的beans.xml文件创建Resource对象 |
或者采用如下代码来创建BeanFactory
:
1 | //搜索文件系统的当前路径下的beans.xml文件创建Resource对象 |
加载多个配置文件来创建Spring容器
如果应用需要加载多个配置文件
来创建Spring
容器,则应该采用BeanFactory
的子接口ApplicationContext
来创建BeanFactory
的实例。 ApplicationContext
接口包含FileSystemXmlApplicationContext
和ClassPathXmlApplicationContext
两个常用的实现类。
如果需要同时加载多个XML
配置文件来创建Spring
容器,则可以采用如下方式:
1 | // 以类加载路径下的beans.xml和service.xml文件来创建ApplicationContext |
当然也可支持从文件系统的相对路径或绝对路径来搜索配置文件,只要使用FileSystemXmlApplicationContext
即可,如下面的程序片段所示:
1 | AplicationContext appContext=new FileSystemXmlApplicationContext("beans.xml","service.xml"); |
由于ApplicationContext
本身就是BeanFactory
的子接口,因此ApplicationContext
完全可以作为Spring
容器来使用,而且功能更强。当然,如果有需要,也可以把ApplicationContext
实例赋给BeanFactory
变量.
原文链接: 7.4.1 Spring容器