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容器