[Spring实战系列]Spring应用上下文

Posted SunnyYoona

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Spring实战系列]Spring应用上下文相关的知识,希望对你有一定的参考价值。


下面是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");
























以上是关于[Spring实战系列]Spring应用上下文的主要内容,如果未能解决你的问题,请参考以下文章

Spring saml,第二个本地 SP - 实体别名和上下文提供者

Spring实战笔记:Spring核心

Spring实战----开篇(包含系列目录链接)

Spring实战407---Bean的作用域

[Spring实战系列]配置Spring IOC容器的Bean

Spring Boot Serverless 实战系列“部署篇” | Mall 应用