当前位置: 首页 > news >正文

(十)Spring教程——Spring配置概述

目录

前言

1.Spring容器高层视图

2.基于XML的配置


前言

        在使用Spring所提供的各项丰富而神奇的功能之前,必须在Spring IoC容器中装配好Bean,并建立好Bean和Bean之间的关联关系。Spring的配置文件已经很精简了,但是广大的开发者希望它做得更好。Spring对这个进行了许多重大的改进,很多原来冗长的配置拥有了简洁的版本。此外,Spring还提供了多种配置方式,既可以选择一种配置,也可以同时使用多种配置。

1.Spring容器高层视图

        要使应用程序中的Spring容器成功启动,需要同时具备以下三方面的条件:

        Spring框架的类包都已经放到应用程序的类路径下。

        应用程序为Spring提供了完备的Bean配置信息。

        Bean的类都已经放到应用程序的类路径下。

        Spring启动时读取应用程序提供的Bean配置信息,并在Spring容器中生成一份相应的Bean配置注册表,然后根据这张注册表实例化Bean,装配好Bean之间的依赖关系,为上层应用提供准备就绪的运行环境。

        Bean配置信息时Bean的元数据信息,它由以下4个方面组成:

        Bean的实现类。

        Bean的属性信息,如数据源的连接数、用户名、密码等。

        Bean的依赖关系,Spring根据依赖关系配置完成Bean之间的装配。

        Bean的行为配置,如生命周期范围及生命周期各过程的回调函数等。

        Bean元数据信息在Spring容器中的内部对应物是由一个个BeanDefinition形成的Bean注册表,Spring实现了Bean元数据信息内部表示和外部定义的解耦。

        Spring支持多种形式的Bean配置方式。Spring 1.0仅支持基于XML的配置,Spring 2.0新增基于注解配置的支持,Spring 3.0新增基于Java类配置的支持,而Spring 4.0则新增基于Groovy动态语言配置的支持。

          Bean配置信息首先定义了Bean的实现及依赖关系,Spring容器根据各种形式的Bean配置信息在容器内部建立Bean定义注册表;然后根据注册表加载、实例化Bean,并建立Bean和Bean之间的依赖关系;最后将这些准备就绪的Bean放到Bean缓存池中,以供外层的应用程序进行调用。

2.基于XML的配置

        对于基于XML的配置,Spring 2.0以后采用Schema格式,这样让不同类型的配置拥有了自己的命名空间,使得配置文件更具扩展性。此外,Spring基于Schema配置方案为许多领域的问题提供了简化的配置方法,配置工作因此得到了大幅简化。

        采用基于Schema的配置格式,文件头的声明会复杂一些。看一个简单的示例,配置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"

 xmlns:aop="http://www.springframework.org/schema/aop"

 xsi:schemaLocation=

"http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-4.0.xsd

http://www.springframework.org/schema/aop

" >http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">

<!--默认命名空间的配置-->

<bean id="foo" class="com.smart.Foo" />

<!--aop命名空间的配置-->

<aop:config>

         <aop:advisor pointcut-ref="execution(**..PetStoreFacade.*(..))" advice-ref="txAdvice" />

</aop:config>

</beans>

        其中xmlns="http://www.springframework.org/schema/beans"是默认的命名空间;

        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 是xsi标准命名空间,用于指定自定义命名空间的Schema文件;

        xmlns:aop="http://www.springframework.org/schema/aop"是自定义命名空间,aop是该命名空间的简称,其值"http://www.springframework.org/schema/aop"是命名空间全称,必须在xsi命名空间为其指定空间对应的Schema文件;

 xsi:schemaLocation=

"http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-4.0.xsd

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop-4.0.xsd",是为每个命名空间指定具体的Schema文件;

        要了解文件头所声明的内容,需要学习一些XML Schema的知识。Schema在文档根节点中通过xmlns对文档所引用的命名空间就行声明。在上面的配置文件中定义了3个命名空间。

①默认命名空间:它没有空间名,用于Spring Bean的定义。

②xsi标准命名空间:这个命名空间用于为每个文档中的命名空间指定相应的Schema样式文件,是W3C定义的标准命名空间。

③aop命名空间:这个命名空间是Spring配置AOP的命名空间,即一种自定义的命名空间。

        命名空间的定义分为两个步骤:第一步是指定命名空间的名称;第二步指定命名空间的Schema文档格式文件的位置,用空格或回车换行进行分隔。

        在第一步中,需要指定命名空间的缩略名和全名,请看下面配置所定义的命名空间:

 xmlns:aop="http://www.springframework.org/schema/aop"

        aop为命名空间的别名,一般使用简洁易记的名称,文档后面的元素可通过命名空间别名加以区分,如<aop:config/>等。而http://www.springframework.org/schema/aop为空间的全限定名,习惯上用文档发布机构的官方网站和相关网站目录作为全限定名。这种命名方式既可以标识文档所属的机构,又可以很好地避免重名的问题。但从XML Schema语法来说,别名和全限定名都可以任意命名。

        如果命名空间的别名为空,则标识该命名空间为文档默认命名空间。文档中无命名空间前缀的元素都属于默认命名空间,如<beans/>、<bean/>等都属于默认命名空间。

在第二步中,为每个命名空间指定了对应的Schema文档格式的定义文件,定义的语法如下:

<命名空间1> <命名空间1Schema文件> <命名空间2> <命名空间2Schema文件>

        命名空间使用全限定名,每个组织机构在发布Schema文件后,都会为该Schema文件提供一个引用的URL地址,一般使用这个URL地址指定命名空间对应的Schema文件。命名空间名称和对应的Schema文件之间使用空格或回车分隔,不同的命名空间之间也使用这种分隔方法。

        指定命名空间的Schema文件地址有两个用途:其一,XML解析器可以获取Schema文件并对文档进行格式合法性验证;其二,在开发环境下,IDE可以引用Schema文件对文档编辑提供诱导功能(自动补全功能)。当然,这个Schema文件的远程地址并非一定能够访问,一般的IDE都提供了从本地类路径查找Schema文件的功能,只有找不到时才从远程加载。

        Spring4.0配置的Schema文件放置在各模块JAR文件内一个名为config的目录下。

        虽然Spring为AOP、声明事务、Java EE都提供了专门的Schema XML配置,但Spring也允许继续使用低版本的基于DTD的XML配置方式。Spring4.0配置的升级是向后兼容的,但强烈建议使用新的基于Schema的配置方式。

        除了支持XML配置方式外,Spring还支持基于注解、Java类及Groovy的配置方式,不同的配置方式在本质上是基本相同的,只是存在形式的区别。由于基于XML的配置方式是最基础、最传统的,所以后面主要以基于XML的配置方式讲解Spring的配置,其他3种配置方式则作简要介绍。

  

相关文章:

(十)Spring教程——Spring配置概述

目录 前言 1.Spring容器高层视图 2.基于XML的配置 前言 在使用Spring所提供的各项丰富而神奇的功能之前&#xff0c;必须在Spring IoC容器中装配好Bean&#xff0c;并建立好Bean和Bean之间的关联关系。Spring的配置文件已经很精简了&#xff0c;但是广大的开发者希望它做得更…...

飞书群聊机器人自定义机器人接入,并实现艾特@群成员功能

飞书群聊机器人还是比钉钉的要麻烦一点&#xff0c;钉钉的直接通过手机号就可以艾特群里面的人&#xff0c;但是飞书的要想艾特群里面的人&#xff0c;需要使用用户的 Open ID 或 User ID。这两个ID怎么获取呢&#xff1f;还需要在飞书的开放平台上创建一个应用&#xff0c;然后…...

CrowdStrike更新致850万Windows设备宕机,微软紧急救火!

7月18日&#xff0c;网络安全公司CrowdStrike发布了一次软件更新&#xff0c;导致全球大范围Windows系统宕机。 预估CrowdStrike的更新影响了将近850万台Windows设备&#xff0c;多行业服务因此停滞&#xff0c;全球打工人原地放假&#xff0c;坐等吃瓜&#xff0c;网络上爆梗…...

银行黄金交易流程

银行黄金交易流程 银行黄金交易流程通常包括以下几个步骤&#xff1a; 咨询和开户&#xff1a; 首先&#xff0c;客户需要到银行的贵金属交易柜台或在线平台咨询黄金交易的相关规定和手续&#xff0c;然后进行开户&#xff0c;在银行开立有关黄金交易的账户。这可能需要提供个…...

MATLAB实验五:MATLAB数据分析

1. 某线路上不同时间对应的电压如下表所示&#xff1a; 1&#xff09;用 3 次多项式拟合(polyfit)该实验曲线&#xff0c;要求绘制 2 原始采样 点&#xff0c;并在 1~8 范围内&#xff0c;使用时间间隔为 0.2 的数据绘制拟合曲线。 建立一个脚本文件&#xff1a;text5_1.m 如下…...

Cannot perform upm operation: connect ETIMEDOUT 34.36.199.114:443 [NotFound]

版本&#xff1a;Unity 2018 Windows 问题&#xff1a;打开 Package Manager&#xff0c;加载报错 尝试解决&#xff1a; 删除项目文件里的Packages下的mainfest.json文件&#xff0c;然后重新打开项目&#xff08;X&#xff09;重新登录 Unity 账号&#xff08;X&#xff09…...

Docusaurus VS VuePress:哪一个更适合你的技术文档?

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…...

昇思25天学习打卡营第25天|MindNLP ChatGLM-6B StreamChat

配置环节 %%capture captured_output !pip uninstall mindspore -y !pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindspore2.2.14 !pip install mindnlp !pip install mdtex2html配置国内镜像 !export HF_ENDPOINThttps://hf-mirror.com下载与加载模型 from m…...

海康威视综合安防管理平台 detection 前台RCE漏洞复现

0x01 产品简介 海康威视综合安防管理平台是一套“集成化”、“智能化”的平台,通过接入视频监控、一卡通、停车场、报警检测等系统的设备。海康威视集成化综合管理软件平台,可以对接入的视频监控点集中管理,实现统一部署、统一配置、统一管理和统一调度。 0x02 漏洞概述 海康…...

【BUG】已解决:ModuleNotFoundError: No module named ‘PIL‘

已解决&#xff1a;ModuleNotFoundError: No module named ‘PIL‘ 目录 已解决&#xff1a;ModuleNotFoundError: No module named ‘PIL‘ 【常见模块错误】 错误原因&#xff1a; 解决办法&#xff1a; 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我…...

css font 优化

文章目录 使用 font-display 控制字体加载预加载关键字体选择合适的字体文件类型按需创建字体文件HTTP 缓存优化 使用 font-display 控制字体加载 避免字体加载导致的空白 block&#xff1a;浏览器在短暂的阻塞期内不显示任何文本&#xff0c;直到字体加载完成。这可能导致页…...

Go之Web急速入门Gin+Gorm框架

简介 只作为快速入门、了解Go的GinGorm框架的demo&#xff0c;不能作为企业级开发。 详细用法请看官网 《Gin官网》 《Gorm官网》 使用GoLand创建Go项目&#xff08;默认modules&#xff09; go版本1.22.2 需要设置代理下载go相关软件包&#xff0c;否则软件包可能无法下载。…...

【MySQL进阶之路 | 高级篇】ER模型

1. 概述 数据库设计是牵一发而动全身的。那么有没有什么办法可以提前看到数据库的全貌呢&#xff1f;比如需要哪些数据表&#xff0c;数据表中应该有哪些字段&#xff0c;通过什么字段进行连接等等。这样我们才能进行整体的梳理和设计。 其实&#xff0c;ER模型就是一个这样的…...

C++基础语法:STL之容器(4)--序列容器中的list(一)

前言 "打牢基础,万事不愁" .C的基础语法的学习 引入 序列容器的学习.以<C Prime Plus> 6th Edition(以下称"本书")内容理解 本书中容器内容不多只有几页.最好是有数据结构方面的知识积累,如果没有在学的同时补上. 序列容器回顾:序列容器内元素按严格…...

WordPress杂技

WordPress杂技 WordPress页面构建器: Avada、Elementor、astra、 Elementor作为一款强大的页面构建工具。 Avada&#xff1a;是一款非常受欢迎的WordPress主题&#xff0c;它的设计理念是简洁、现代、响应式&#xff0c;Avada拥有丰富的模板和布局&#xff0c;可以轻松创建出…...

鸿蒙 动态共享包HSP的创建和引用

1.什么是动态共享包HSP HSP&#xff08;Harmony Shared Package&#xff09;是动态共享包&#xff0c;可以包含代码、C库、资源和配置文件&#xff0c;通过HSP可以实现代码和资源的共享。HSP不支持独立发布&#xff0c;而是跟随其宿主应用的APP包一起发布&#xff0c;与宿主应…...

ARM架构(二)—— arm v7-a/v8/v9寄存器介绍

1、ARM v7-A寄存器 1.1 通用寄存器 V7 V8开始 FIQ个IRQ优先级一样&#xff0c; 通用寄存器&#xff1a;31个 1.2 程序状态寄存器 CPSR是程序状态毒存器&#xff0c;保存条件标志位&#xff0c;中断禁止位&#xff0c;当前处理器模式等控制和状态位。每种异常模式下还存在SPS…...

C++合作开发项目:美术馆1.0

快乐星空MakerZINCFFO 合作入口&#xff1a;CM工作室 效果图&#xff1a; 代码&#xff1a; &#xff08;还有几个音乐&#xff01;&#xff09; main.cpp #include <bits/stdc.h> #include <windows.h> #include <conio.h> #include <time.h> #in…...

QT 5 同时使用Q_DECLARE_METATYPE(pointdata) 和继承 QObjectUserData

在Qt框架中&#xff0c;QObjectUserData 和 Q_DECLARE_METATYPE() 宏都与Qt的元对象系统有关&#xff0c;但它们的使用方式有一些特别的限制和兼容性问题。 关于QObjectUserData&#xff1a; QObjectUserData 是一个用来存储用户数据的类。在Qt中&#xff0c;每个 QObject 可以…...

【MySQL进阶之路 | 高级篇】范式概述与第一范式

1. 范式简介 在关系型数据库中&#xff0c;关于数据表的设计的基本原则&#xff0c;规则就称为范式。可以理解为&#xff0c;一张数据表的设计结果需要满足的某种设计标准的级别。要想设计一个结构合理的关系型数据库&#xff0c;必须满足一定的范式。 范式的英文名是Normal …...

Open-TeleVision复现及机器人迁移

相关信息 标题 Open-TeleVision: Teleoperation with Immersive Active Visual Feedback作者 Xuxin Cheng1 Jialong Li1 Shiqi Yang1 Ge Yang2 Xiaolong Wang1 UC San Diego1 MIT2主页 https://robot-tv.github.io/链接 https://robot-tv.github.io/resources/television.pdf代…...

Notepad++换安装路径之后,右键打开方式报错:Windows无法访问指定设备、路径或文件。你可能没有适当的权限访问该项目。的处理方法

把Notepad添加到右键打开方式&#xff0c;可以参考下面的3篇文章添加&#xff1a; https://blog.csdn.net/xiaoerbuyu1233/article/details/88287747 https://blog.csdn.net/qq_44000337/article/details/120277317 https://www.cnblogs.com/zhrngM/p/12899026.html 这里主要是…...

【Flutter 面试题】 使用成熟状态管理库的弊端有哪些?

【Flutter 面试题】 使用成熟状态管理库的弊端有哪些? 文章目录 写在前面口述回答补充说明写在前面 🙋 关于我 ,小雨青年 👉 CSDN博客专家,GitChat专栏作者,阿里云社区专家博主,51CTO专家博主。2023博客之星TOP153。 👏🏻 正在学 Flutter 的同学,你好! 😊 …...

Apache Commons技术详解

文章目录 简介官网链接原理基础使用Commons LangCommons Collections 高级使用Commons IOCommons Math 优缺点优点缺点 总结 简介 Apache Commons 是 Apache 软件基金会下的一个项目&#xff0c;旨在提供可重用的Java组件。这些组件覆盖了广泛的编程任务&#xff0c;从字符串处…...

怎样使用 Juicer tools 的 dump 命令将.hic文件转换为交互矩阵matrix计数文件 (Windows)

创作日志&#xff1a; 万恶的生信…一个scHiC数据集没有提供处理好的计数文件&#xff0c;需要从.hic转换。Github一个个好长的文档看了好久才定位到 juicer tools 的dump命令&#xff0c;使用起来比想象中简单。 一、下载Juicer tools 注意&#xff1a;使用Juicer tools的前提…...

【Docker】Docker Desktop - WSL update failed

问题描述 Windows上安装完成docker desktop之后&#xff0c;第一次启动失败&#xff0c;提示&#xff1a;WSL update failed 解决方案 打开Windows PowerShell 手动执行&#xff1a; wsl --set-default-version 2 wsl --update...

基于rsync\unlink 等一套本机备份跨机备份历史备份清理shell 脚本

一 摘要 本文主要介绍一套本地备份、跨机器备份、历史备份清理脚本&#xff0c;使用场景如数据库备份等 二 环境 linux 系列系统 基本都支持&#xff0c;个别命令可能需要微调。 2.1 实验环境 [rootlocalhost rsync]# cat /etc/centos-release CentOS Linux release 7.9.2…...

使用nginx实现一个端口和ip访问多个vue前端

前言&#xff1a;由于安全组要求&#xff0c;前端页面只开放一个端口&#xff0c;但是项目有多个前端&#xff0c;此前一直使用的是一个前端使用单独一个端口进行访问&#xff0c;现在需要调整。 需要实现&#xff1a;这里以80端口为例&#xff0c;两个前端分别是&#xff1a;p…...

Linux云计算 |【第一阶段】SERVICES-DAY5

主要内容&#xff1a; 源码编译安装、rsync同步操作、inotify实时同步、数据库服务基础 实操前骤&#xff1a;&#xff08;所需tools.tar.gz与users.sql&#xff09; 1.两台主机设置SELinnx和关闭防火墙 setenforce 0 systemctl stop firewalld.service //停止防火墙 sy…...

IP第一次综合实验

一、实验拓扑 二、实验要求 1、R6为ISP&#xff0c;接口IP地址均为公有地址&#xff0c;该设备只能配置地址之后不能冉对其进行任何配置 2、R1-R5为局域网&#xff0c;私有Ip地址192.168.1.0/24&#xff0c;请合理分配 3、R1、82、R4&#xff0c;各有两个环回IP地址;R5,R6各…...