下面是Spring-Hello-world项目的运行代码:
package com.sjf.bean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* 测试类
* @author sjf0115
*
*/
public class Test {
private static ApplicationContext context;
private static HelloWorld helloWorld;
public static void main(String[] args) {
// 1. 创建Spring IOC容器
context = new ClassPathXmlApplicationContext("applicationContext.xml");
// 2. 从IOC容器中获取Bean实例
helloWorld = (HelloWorld)context.getBean("helloworld");
// 3.调用sayHello方法
helloWorld.sayHello();
}
}
从代码中可以看出使用Spring框架的第一步就是使用Spring应用上下文创建Spring IOC容器:
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
因此下面我们就说明一下Spring应用上下文的事情。
Spring 自带了几种类型的应用上下文:
Spring上下文 | 描述 |
ClassPathXmlApplicationContext | 从类路径下的XML 配置文件中加载上下文定义,把应用上下文定义文件当作类资源。 |
FileSystemXmlapplicationcontext | 读取文件系统下的XML 配置文件并加载上下文定义。 |
XmlWebApplicationContext | 读取Web 应用下的XML 配置文件并装载上下文定义。 |
我们会在以后慢慢说明基于Spring 的Web 应用,届时我们将对XmlWebApplicationContext进行详细解释。现在我们先简单地使用FileSystemXmlApplicationContext从文件系统中加载应用上下文或者使用ClassPathXmlApplicationContext从类路径中加载应用上下文。
无论是从文件系统中装载应用上下文还是从类路径下装载应用上下文,将Bean加载到Bean 工厂的过程都是相似的。例如,如下代码展示了如何加载一个File-SystemXmlApplicationContext:
ApplicationContext context = new FileSystemXmlApplicationContext("d:/applicationContext.xml");
类似地,你可以使用ClassPathXmlApplicationContext 从应用的类路径下加载应用上下文:
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
使用FileSystemXmlApplicationContext 和使用ClassPathXmlApplicationContext的区别在于
- FileSystemXmlApplicationContext 在指定的文件系统路径下查找applicationContext.xml 文件;
- ClassPathXmlApplicationContext 是在所有的类路径(包含JAR 文件)下查找applicationContext.xml.xml 文件。
下图表示了我以前写applicationContext.xml存放位置的两种方式:
之前还表示对applicationContext.xml存放位置表示疑惑,难道只凭一个名字就能找到它?现在终于明白了,ClassPathXmlApplicationContext 是在所有的类路径(包含JAR 文件)下查找applicationContext.xml.xml
文件,所以以上两种方式Spring IOC容器都能找到。
通过现有的应用上下文引用,你可以调用应用上下文的getBean() 方法从Spring 容器中获取Bean。
// 2. 从IOC容器中获取Bean实例
helloWorld = (HelloWorld)context.getBean("helloworld");