1.1 Spring IoC容器
从昨天的例子当中我们已经知道spring IoC容器的作用,它可以容纳我们所开发的各种Bean。并且我们可以从中获取各种发布在Spring IoC容器里的Bean,并通过描述得到它。
1.2 Spring IoC容器的设计
Spring IoC容器的设计主要是基于BeanFactory和ApplicationContext两个接口,其中ApplicationContext是BeanFactory的子接口之一。换句话说BeanFactory是Spring IoC容器所定义的最底层接口,而ApplicationContext是其高级接口之一,并且对BeanFactory功能做了许多有用的扩展,所以在绝大部分的工作场景下,都会使用ApplicationContext作为Spring IoC容器。
序号 容器 & 描述1 Spring BeanFactory 容器
它是最简单的容器,给 DI 提供了基本的支持,它用 org.springframework.beans.factory.BeanFactory 接口来定义。BeanFactory 或者相关的接口,如 BeanFactoryAware,InitializingBean,DisposableBean,在 Spring 中仍然存在具有大量的与 Spring 整合的第三方框架的反向兼容性的目的。
2 Spring ApplicationContext 容器
该容器添加了更多的企业特定的功能,例如从一个属性文件中解析文本信息的能力,发布应用程序事件给感兴趣的事件监听器的能力。该容器是由 org.springframework.context.ApplicationContext 接口定义。
2.1 Spring BeanFactory 容器
这是一个最简单的容器,它主要的功能是为依赖注入 (DI) 提供支持,这个容器接口在 org.springframework.beans.factory.BeanFactor 中被定义。BeanFactory 和相关的接口,比如BeanFactoryAware、DisposableBean、InitializingBean,仍旧保留在 Spring 中,主要目的是向后兼容已经存在的和那些 Spring 整合在一起的第三方框架。
在 Spring 中,有大量对 BeanFactory 接口的实现。其中,最常被使用的是 XmlBeanFactory 类。这个容器从一个 XML 文件中读取配置元数据,由这些元数据来生成一个被配置化的系统或者应用。
上次的例子,只修改了测试文件内容:
在这里XmlBeanFactory()API不常用,接下来就是我们常用的ApplicationContext
2.2 Spring ApplicationContext 容器
Application Context 是 BeanFactory 的子接口,也被成为 Spring 上下文。 Application Context 是 spring 中较高级的容器。和 BeanFactory 类似,它可以加载配置文件中定义的 bean,将所有的 bean 集中在一起,当有请求的时候分配 bean。ApplicationContext 包含 BeanFactory 所有的功能。一般情况下,相对于 BeanFactory,ApplicationContext 会更加优秀。
最常被使用的 ApplicationContext 接口实现:
FileSystemXmlApplicationContext:该容器从 XML 文件中加载已被定义的 bean。在这里,你需要提供给构造器 XML 文件的完整路径。
ClassPathXmlApplicationContext:该容器从 XML 文件中加载已被定义的 bean。在这里,你不需要提供 XML 文件的完整路径,只需正确配置 CLASSPATH 环境变量即可,因为,容器会从 CLASSPATH 中搜索 bean 配置文件。
WebXmlApplicationContext:该容器会在一个 web 应用程序的范围内加载在 XML 文件中已被定义的 bean。
之前橘子那个例子当中已经做过ClassPathXmlApplicationContext的例子了,接下来,让我们看一个关于 FileSystemXmlApplicationContext 的例子。
例子:
其他的地方没有变,把之前的ClassPathXmlApplicationContext()API换成 FileSystemXmlApplicationContext ()API去加载bean可用配置xml文件。使用FileSystemXmlApplicationContext和使用ClassPathXmlApplicationContext的区别在于: FileSystemXmlApplicationContext在指定的文件系统路径下查找xml文件; 而ClassPathXmlApplicationContext是在所有的类路径(包含JAR文件) 下查找xml文件。
如 :
ApplicationContext context = new FileSystemXmlApplicationContext(“C:/bean.xml”);
ApplicationContext context = new ClassPathXmlApplicationContext(“bean.xml”);