[Spring实战系列](5)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");
时间: 2024-11-05 20:33:44

[Spring实战系列](5)Spring应用上下文的相关文章

Spring Data 系列(三) Spring+JPA(spring-data-commons)

本章是Spring Data系列的第三篇.系列文章,重点不是讲解JPA语法,所以跑开了JPA的很多语法等,重点放在环境搭建,通过对比方式,快速体会Spring 对JPA的强大功能. 准备代码过程中,保持了每个例子的独立性,和简单性,准备的源码包,下载即可使用.如果,对JPA语法想深入研究的话,直接下载在此基础上进行测试. 前言 Spring Data 系列(一) 入门:简单介绍了原生态的SQL使用,以及JdbcTemplate的使用,在这里写SQL的活还需要自己准备. Spring Data 系

Spring基础系列12 -- Spring AOP AspectJ

Spring基础系列12 -- Spring AOP AspectJ 转载:http://www.cnblogs.com/leiOOlei/p/3613352.html 本文讲述使用AspectJ框架实现Spring AOP. 再重复一下Spring AOP中的三个概念, Advice:向程序内部注入的代码. Pointcut:注入Advice的位置,切入点,一般为某方法. Advisor:Advice和Pointcut的结合单元,以便将Advice和Pointcut分开实现灵活配置. Aspe

Spring基础系列8 -- Spring自动装配bean

Spring基础系列8 -- Spring自动装配bean 转载:http://www.cnblogs.com/leiOOlei/p/3548290.html 1.      Auto-Wiring ‘no’ 2.      Auto-Wiring ‘byName’ 3.      Auto-Wiring ‘byType 4.      Auto-Wiring ‘constructor’ 5.      Auto-Wiring ‘autodetect’ Spring Auto-Wiring Be

Spring基础系列6 -- Spring表达式语言(Spring EL)

Spring基础系列6 -- Spring表达式语言(Spring EL) 转载:http://www.cnblogs.com/leiOOlei/p/3543222.html 本篇讲述了Spring Expression Language —— 即Spring3中功能丰富强大的表达式语言,简称SpEL.SpEL是类似于OGNL和JSF EL的表达式语言,能够在运行时构建复杂表达式,存取对象属性.对象方法调用等.所有的SpEL都支持XML和Annotation两种方式,格式:#{ SpEL exp

Spring基础系列9 -- Spring AOP

Spring基础系列9 -- Spring AOP 转载:http://www.cnblogs.com/leiOOlei/p/3556054.html Spring AOP即Aspect-oriented programming,面向切面编程,是作为面向对象编程的一种补充,专门用于处理系统中分布于各个模块(不同方法)中的交叉关注点的问题.简单地说,就是一个拦截器(interceptor)拦截一些处理过程.例如,当一个method被执行,Spring AOP能够劫持正在运行的method,在met

Spring基础系列10 -- Spring AOP-----------Pointcut, Advisor

Spring基础系列10 -- Spring AOP-----------Pointcut, Advisor 转载:http://www.cnblogs.com/leiOOlei/p/3557643.html 上一篇的Spring AOP Advice例子中,Class(CustomerService)中的全部method都被自动的拦截了.但是大多情况下,你只需要一个方法去拦截一两个method.这样就引入了Pointcut(切入点)的概念,它允许你根据method的名字去拦截指定的method

[Spring实战系列](10)初探Bean生命周期

1. 生命周期流程图 Bean在Spring容器中从创建到销毁经历了若干个阶段,在每一个阶段都可以针对Spring如何管理Bean进行个性化定制. 正如你所见,在Bean 准备就绪之前,Bean 工厂执行了若干启动步骤. Spring 对Bean 进行实例化. Spring 将值和Bean 的引用注入进Bean 对应的属性中. 如果Bean 实现了BeanNameAware接口,Spring 将Bean的ID传递给setBeanName() 接口方法. 如果Bean 实现了BeanFactory

[Spring实战系列](11)SpEL使用表达式装配

到目前为止,我们为Bean 的属性和构造器参数装配的所有东西都是在Spring 的XML 配置文件中静态定义的. <bean id = "yoona" class = "com.sjf.bean.Student"> <property name="name" value = "yoona"/> <property name="hobby" value = "踢足球,打

[Spring实战系列](18)注解切面

使用注解来创建切面是AspectJ 5所引入的关键特性.在AspectJ 5之前,编写AspectJ切面需要学习一种Java语言的扩展,但是AspectJ面向注解的模型可以非常简单的通过少量注解把任意类转变为切面. 回顾一下Audience类,没有任何地方让它成为一个切面,我们不得不使用XML声明通知和切点. 我们通过@AspectJ注解,我们再看看Audience类,不需要任何额外的类或Bean声明就能将它转换为一个切面. package com.sjf.bean; /** * 歌手实体类 *

[Spring实战系列](16)面向切面编程(AOP)概述

1. 简介 在软件中,有些行为对于大多数应用都是通用的.日志,安全和事务管理的确很重要,但他们是都是应用对象主动参与的行为呢?如果让应用对象只关注自己所针对的业务领域问题,而其他方面的问题由其他应用对象来处理,这样会不会更好? 在软件开发中,分布于应用中多处的功能被称为横切关注点.通常,这些横切关注点从概念上是与应用的业务逻辑相分离的(但是往往直接嵌入到应用的业务逻辑中).将这些横切关注点与业务逻辑相分离是面向切面编程索要解决的. 上图展示了一个被划分为模块的典型应用.每个模块的核心功能都是为特