Spring应用上下文配置:xml配置

2023-10-27

前言

        之前的章节我们讲解了Spring的两种启动方式,分别是web.xml方式,java编程方式。如同我们讲过的那样,启动Spring,实际上是启动一个容器,创建一组应用上下文。既然需要创建应用上下文,就必须配置应用上下文,指导应用上下文如何工作。如同启动Spring一样,配置Spring应用上下文也有三种方式,分别是xml配置,混合配置,java编程配置。

bean

        使用Spring,我们会不断谈到bean,那么bean到底是什么东西?从狭义上讲,凡是实现类(区别于接口)都可作为bean。在Spring看来,凡是有注解@Component、@Service、@Controller、@Repository等的类都是bean。@Service、@Controller、@Repository是@Component更为具体的注解,@Service表示业务类的bean,@Controller表示控制类的bean,@Repository表示持久化的bean,而@Component是一个通用的bean。就语法上讲,@Service、@Controller、@Repository都可以被@Component替换,但是,前三者是更为具体的bean,拥有更为丰富的功能,而且看名字就能知道bean的类型,不像@Component这么笼统。实际编程中,我们建议使用@Service、@Controller、@Repository注解不同的bean。由此看来,bean就是一个可以实现业务逻辑、控制流程或是持久化的实现类。

xml配置

根应用上下文的配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">

    <bean name="studentImp" class="com.gxz.StudentImp" />

</beans>
        以上是文件WEB-INF\rootContext.xml的内容,它是根应用上下文的配置。这些配置告诉Spring管理bean——com.gxz.StudentImp,在适当的时候实例化它,取名为studentImp。以下代码是bean studentImp的定义。
package com.gxz;

public class StudentImp implements Student {
	@Override
	public String sayHi(String name) {
		return "Hi," + name;
	}
}
        这个bean studentImp实现了接口Student,接口代码如下所示。
package com.gxz;

public interface Student {
	String sayHi(String name);
}

DispatcherServlet应用上下文的配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">

    <mvc:annotation-driven />

    <bean name="studentController" class="com.gxz.StudentController">
        <property name="student" ref="studentImp" />
    </bean>

</beans>
        以上是文件WEB-INF\servletContext.xml的内容,它是DispatcherServlet应用上下文的配置。 这些配置告诉Spring管理bean——com.gxz.StudentController,在适当的时候实例化它,取名为studentController,并注入bean studentImp 。<mvc:annotation-driven />这个配置表示注解驱动,有了这项配置,Spring就可以在控制器(bean studentController就是一个控制器)上使用注解@RequestMapping、@RequestBody、@RequestParam、@PathParam、@ResponseBody等注解。关于控制器、这些注解,后续章节我们再详细讲解。以下是bean studentController的定义。
package com.gxz;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class StudentController {
	private Student student;
	
	@ResponseBody
	@RequestMapping("/")
	public String sayHi() {
		return "Hi!";
	}
	
	@ResponseBody
	@RequestMapping(value="/say", params="name")
	public String say(@RequestParam("name") String name) {
		return student.sayHi(name);
	}

	public void setStudent(Student student) {
		this.student = student;
	}
}
        我们注意到,bean studentController有一个注解@Controller,表示该bean是一个控制器。我们知道DispatcherServlet的映射模式/,它将会映射所有的url请求,并把请求映射到控制器的方法上。所以,我们在DispatcherServlet应用上下文管理控制器bean studentController。至于注解@ResponseBody、@RequestMapping的含义,我们后续章节会进行讲解。现在可以简单的这么理解,@ResponseBody表示该方法可以接收映射,@RequestMapping是一种映射模式,相对于DispatcherServlet的映射模式。
        比如说,DispatcherServlet的映射模式是/,方法sayHi的@RequestMapping的映射模式是/,那么请求为/,将会映射到该方法,比如url为http://localhost:8080/Test/。
        比如说,DispatcherServlet的映射模式是/,方法say的@RequestMapping的映射模式是/say,那么请求为/say、/say/,将会映射到该方法,比如url为http://localhost:8080/Test/say、http://localhost:8080/Test/say/。
        比如说,DispatcherServlet的映射模式是/do/*,方法sayHi的@RequestMapping的映射模式是/,那么请求为/do/(注意不是/do),将会映射到该方法,比如url为http://localhost:8080/Test/do/。注意,url为http://localhost:8080/Test/do不会映射到该方法。
        DispatcherServlet的映射模式是/do/*,方法say的@RequestMapping的映射模式是/say,那么请求为/do/say、/do/say/,将会映射到该方法,比如url为http://localhost:8080/Test/do/say、http://localhost:8080/Test/do/say/。
        DispatcherServlet的映射模式是/do/*,方法say的@RequestMapping的映射模式是/say/,那么请求为/do/say/(不是/do/say),将会映射到该方法,比如url为http://localhost:8080/Test/do/say/。注意,url为http://localhost:8080/Test/do/say,不会映射到该方法。
        以上代码@RequestMapping(value="/say", params="name"),那么什么样的请求才会映射到该方法呢?params="name"表示请求一定要有参数name。而根据前面章节对DispatcherServlet的配置,DispatcherServlet的映射模式是/,所以请求/say?name=xxx、/say/?name=xxx,就会映射到该方法,比如url为http://localhost:8080/Test/say?name=xxx,http://localhost:8080/Test/say/?name=xxx。注意,以下请求不会映射到这个方法。http://localhost:8080/testSpring/say/,http://localhost:8080/testSpring/say。
        bean studentController需要注入一个Student类型(接口)的bean,而bean studentImp 正是Student的实现,所以我们有了这样的配置。<property name="student" ref="studentImp" />。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring应用上下文配置:xml配置 的相关文章

随机推荐

  • Quorum企业以太坊环境搭建教程

    Quorum是一个许可制的以太坊联盟区块链实现 包含了金融巨头JP摩根开发的一个GETH分支版本 可以在节点之间实现私有和快速的交易 Quorum为保证隐私对节点之间的私有交易进行了专门的设计 它使用Raft和Istanbul算法实现共识
  • ContentResolver的相关使用

    文章目录 AndroidManifest xml MainActivity MusicActivity PicActivity Contact AndroidManifest xml
  • python新手有手就会的100个代码

    前言 我记得刚开始接触编程的时候 觉得太难了 也很好奇 写代码的那些人也太厉害了吧 全是英文的 他们的英文水平一定很好吧 他们是怎么记住这么多代码格式的 而且错了一个标点符号 整个程序都会有影响 一个程序几千行 错一个标点符号都不行这也太难
  • Ideal常用插件

    1 Key promoter Key promoter这款插件适合新手使用 当你点击鼠标一个功能的时候 可以提示你这个功能快捷键是什么 2 Maven Helper 3 JRebel for IntelliJ jrebel 热部署插件 能够
  • STM32F4 discovery USART1(PA9,PA10)不能正常通信的问题

    PA9和PA10两个引脚使用了usb otg功能 STM32f4Discovery示意图显示 此USART上串行TX的默认引脚为PA9 它被连接到一个LED和一个4 7uF的电容器 C49 该引脚用于USB OTG端口上的VBUS线 电容器
  • 深度学习配置CUDA8.0/9.0及对应版本cuDNN安装

    本人为中科院测地所博士生 所研究专业为自然地理学 遥感数据分析方向 研究课题偏向于深度学习 由于本人不是计算机专业 故有关计算机配置及操作方面相较于计算机专业人员不是那么专业 所以请各位大牛大神绕道 我这里所做的一些工作比较浅显 仅供需要的
  • 纯CSS实现轮播图

    利用CSS实现一个轮播图 实现无缝衔接 平滑过渡 hover暂停效果 本文利用纯CSS实现一个轮播图 代码简捷 实现简单 没有js的接入 为一定场景下的轮播图提供一个简单的实现 先看效果图 1 思路解析 我们把整个轮播分为三个区域解析 分别
  • C语言程序设计打鱼还是晒网,C语言编程三天打鱼两天晒网

    满意答案 dmmk2822 2018 11 05 采纳率 46 等级 6 已帮助 160人 中国有句俗语叫 三天打鱼两天晒网 某人从 1990年 1月 1日起开始 三天打鱼两天晒网 问这个人在以后的某一天中是 打鱼 还是 晒网 根据题意可以
  • 网线传输速度测试_网络传输速率及测速方法

    网络传输速率概述根据国家颁布的通信行业标准 固定宽带4M 6M 12M 20M产品及3G网络21M 42M产品公布的速率均是指数据单位比特 秒 bps 而平常用户上网软件或者下载速度指的是字节 秒 Byte s 二者之间的换算关系为8比特
  • 信号与系统—傅里叶级数

    写在前面 相信很多接触傅里叶级数的人都觉得这是一个很复杂的东西 包含大量的复杂公式并且不知道它是用来干什么的 此文从傅里叶级数的最初产生过程进行介绍 产生之初必然伴也随着某种应用 更准确的说是应用促使发展出傅里叶级数来解决现实世界中存在的问
  • 自动控制原理_卢京潮_线性系统的时域分析与校正_学习笔记

    总目录 第一章自动控制的一般概念 第二章控制系统的数学模型学习笔记 https blog csdn net mahoon411 article details 112555468 第三章线性系统的时域分析与校正学习笔记 https blog
  • 总结-unity-生命周期图

    完整的生命周期图
  • Ajax 的GET请求和POST请求

    Ajax 全称是Asynchronous Javascript And XML 异步JavaScript和XML 在网页中 利用XMLHttpRequest对象和服务器进行数据交互的方式 基于浏览器的开发者工具分析通信过程 1 打开浏览器
  • phpstudy+phpstorm+navicat环境配置

    phpstudy phpstorm navicat环境配置 这篇文章对我帮助很大 附上链接 https blog csdn net u012861467 article details 54692236 本文章着重记录学习过程如果对你有帮助
  • 看雪学习笔记-[原创]EXP编写学习 之 栈溢出(一)

    看雪学习笔记 原创 EXP编写学习 之 栈溢出 一 https www exploit db com exploits 10619 usr bin python coding UTF 8 char x41 27000 Fileptr ope
  • VMware Workstation搭建Centos7虚拟机详细步骤

    直接按照图文步骤进行操作即可 目录 1 新建虚拟机 2 典型安装 3 稍后安装操作系统 4 版本选择CentOS 7 64位 5 设置虚拟机的名称和位置 6 设置磁盘大小 7 虚拟机向导任务完成 8 虚拟机设置 9 开启虚拟机 10 正式安
  • Python——文件搜索工具

    功能 通过输入一个目标路径和关键字 检索路径下所有文件和子文件中是否有包含关键字的文件 实现 由于需要遍历路径的子文件 因此使用os walk可以递归遍历操作系统的所有文件 具体代码如下 for dirpath dirnames filen
  • 第一章 函数 极限 连续

    第一章 函数 极限 连续 第一节 函数 一 函数的概念及常见函数 1 函数概念 函数的两个基本要素 对应关系 定义域 判断两函数相等 从函数的两基本要素入手 即两函数的对应关系 表达式 定义域相同 对 于 任 意 x D 变 量 x 按 照
  • 时序分解

    时序分解 MATLAB实现MVMD多元变分模态分解信号分量可视化 目录 时序分解 MATLAB实现MVMD多元变分模态分解信号分量可视化 效果一览 基本介绍 程序设计 参考资料 效果一览 基本介绍 MVMD多元变分模态分解 可直接替换Exc
  • Spring应用上下文配置:xml配置

    前言 之前的章节我们讲解了Spring的两种启动方式 分别是web xml方式 java编程方式 如同我们讲过的那样 启动Spring 实际上是启动一个容器 创建一组应用上下文 既然需要创建应用上下文 就必须配置应用上下文 指导应用上下文如