7.4.1 Spring容器

7.4.1 Spring容器

Spring容器最基本的接口就是BeanFactoryBeanFactory负责配置创建管理Bean,它有一个子接口:ApplictionContext,也被称为Spring上下文。 Spring容器还负责管理BeanBean之间的依赖关系。

BeanFactory接口方法

BeanFactory接口包含如下几个基本方法。

方法 描述
boolean containsBean(String name) 判断Spring容器是否包含idnameBean实例。
<T> T getBean(Class<T> requiredType) 获取Spring容器中属于requiredType类型的、唯一的Bean实例。
Object getBean(String name) 返回容器id为nameBean实例。
<T> T getBean(String name,Class requiredType) 返回容器中idname,并且类型为requiredTypeBean
Class<?> getType(String name) 返回容器中idnameBean实例的类型。

调用者只需使用getBean()方法即可获得指定Bean的引用,无须关心Bean的实例化过程。Bean实例的创建、初始化以及依赖关系的注入都由Spring容器完成
BeanFactory常用的实现类是DefaultListableBeanFactory

ApplicationContext接口

ApplicationContextBeanFactory的子接口,因此功能更强大。对于大部分Java EE应用而言,使用ApplicationContext作为Spring容器更方便

  • 其常用实现类是FileSystemXmlApplicationContextClassPathXmlApplicationContextAnnotationConfigApplicationContext
  • 如果在Web应用中使用Spring容器,则通常有XmlWebApplicationContextAnnotationConfigWebApplicationContext两个实现类。

创建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
2
3
4
5
6
//搜索类加载路径下的beans.xml文件创建Resource对象
Resource isr=new ClassPathResource("beans.xml");
// 创建默认的BeanFactory容器
DefaultListableBeanFactory beanFactory=new DefaultListableBeanFactory();
// 让默认的BeanFactory容器加载isr对应的XML配置文件
new XmlBeanDefinitionReader(beanFactory).loadBeanDefinitions(isr);

或者采用如下代码来创建BeanFactory:

1
2
3
4
5
6
//搜索文件系统的当前路径下的beans.xml文件创建Resource对象
Resource isr=new FileSystemResource("beans.xml");
// 创建默认的BeanFactory容器
DefaultListableBeanFactory beanFactory=new DefaultListableBeanFactory();
// 让默认的BeanFactory容器加载isr对应的XML配置文件
new XmlBeanDefinitionReader(beanFactory).loadBeanDefinitions(isr);

加载多个配置文件来创建Spring容器

如果应用需要加载多个配置文件来创建Spring容器,则应该采用BeanFactory的子接口ApplicationContext来创建BeanFactory的实例ApplicationContext接口包含FileSystemXmlApplicationContextClassPathXmlApplicationContext两个常用的实现类。
如果需要同时加载多个XML配置文件来创建Spring容器,则可以采用如下方式:

1
2
// 以类加载路径下的beans.xml和service.xml文件来创建ApplicationContext
AplicationContext appContext=new ClassPathXmlApplicationContext("beans.xml","service.xml");

当然也可支持从文件系统的相对路径或绝对路径来搜索配置文件,只要使用FileSystemXmlApplicationContext即可,如下面的程序片段所示:

1
AplicationContext appContext=new FileSystemXmlApplicationContext("beans.xml","service.xml");

由于ApplicationContext本身就是BeanFactory的子接口,因此**ApplicationContext完全可以作为Spring容器来使用**,而且功能更强。当然,如果有需要,也可以把ApplicationContext实例赋给BeanFactory变量.