一起学SF框架系列4.7-模块context-MessageResource

news2025/1/13 10:02:19

Spring通过MessageSource接口提供了国际化(“i18n”)功能。搞明白MessageResource相关接口和类,基本就掌握了国际化功能。

MessageSource接口

定义了消息访问接口。
String getMessage(String code,Object[]args,String default,Locale loc):核心方法,用于从MessageSource检索消息的基本方法(参数说明:code-消息代码;args-消息用到替换值,从{0}对应第一个参数,以此类推;default-消息找不到代替的默认消息;loc-国际化编码)。如果找不到指定区域设置的消息,则使用默认消息。使用标准库提供的MessageFormat功能,传入的任何参数都将成为替换值。
String getMessage(String code,Object[]args,Locale loc):本质上与前面的方法相同,但有一个区别:不能指定默认消息。如果找不到消息,则会引发NoSuchMessageException。
String getMessage(MessageSourceResolvable resolvable,Locale Locale):前面方法中使用的所有属性也封装在一个名为MessageSourceResolvable的类中,您可以将该类与此方法一起使用。

类关系

在这里插入图片描述

从图上看,虽然国际化功能比较简单,但Spring的设计和实现还是有点复杂。从使用来说我们只需关注ResourceBundleMessageSource和ReloadableResourceBundleMessage。后者可以看做是前者的增强版,具体区别如下:
1、ResourceBundleMessageSource只是从类路径加载资源文件,ReloadableResourceBundleMessage可从任何资源位置读取文件。
2、ResourceBundleMessageSource限于读取.properties文件,ReloadableResourceBundleMessage还可以读取xml属性文件。
3、ResourceBundleMessageSource不支持配置默认编码(自身默认为““ISO-8859-1””),ReloadableResourceBundleMessage支持。
4、ResourceBundleMessageSource不支持对bundle属性文件的热重新加载,ReloadableResourceBundleMessage支持。

使用

配置

定义消息bean。

	<!-- bean名称必须是 messageSource -->
	<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
  	 	<property name="defaultEncoding" value ="UTF-8" />
		<!-- 消息文件名 -->
		<property name="basenames" >
			<list>
				<!-- 消息文件名,后缀通常是.properties; i18n国际化的文件名格式:文件名_语言编码 为对应语言的配置文件-->
				<value>i18n_info</value>
				<value>i18n_error</value>
			</list>
		</property>
	</bean>

注:
1、因为Spring的MessageSource基于Java的ResourceBundle,所以它不会合并具有相同基本名称的bundle,而是只使用找到的第一个bundle。具有相同基本名称的后续消息束将被忽略。
2、国际化地区语言码对照表(i18n)https://blog.csdn.net/fujianxinghuo/article/details/126504621
3、对应上面配置的消息文件示例:
在这里插入图片描述

框架加载

ApplicationContext容器刷新时,会自动搜索上下文中定义的MessageSource bean。bean的名称必须为messageSource。如果找到这样的bean,则对前面方法的所有调用都将委托给消息源。如果找不到消息源,ApplicationContext将尝试查找包含同名bean的父级,如果存在则作为MessageSource。如果ApplicationContext找不到任何消息源,则会实例化一个空的DelegatingMessageSource,以便能够接受对上面定义的方法的调用。

应用使用

1、用@Autowired注入到bean属性

@Component
public class DemoMessageSource extends BaseDemo{
	@Autowired
	MessageSource ms;
	
	public void demo() {
		super.demo();
		// 使用英语		
		System.out.println("from message_info:"+ms.getMessage("demo.title", null, null,Locale.ENGLISH));
		System.out.println("from message_error:"+ms.getMessage("error.except", null, null,Locale.ENGLISH));
		// 使用中文
		System.out.println("from message_info:"+ms.getMessage("demo.title", null, null,Locale.CHINESE));
		System.out.println("from message_error:"+ms.getMessage("error.except", null, null,Locale.CHINESE));
	}
}

2、xml模式配置,示例如下:

<bean id="example" class="com.demo.Example">
		<property name="messages" ref="messageSource"/>
	</bean>

3、还可以使用MessageSourceAware接口获取应用程序容器的MessageSource引用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/679425.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

全网唯一!Matlab原神配色包MGenshin

前段时间&#xff0c;在原神官网逛了一圈&#xff0c;发现里面角色的原画配色十分的好看&#xff0c;便突发奇想&#xff1a;要是把原神配色用在SCI论文插图上&#xff0c;emmmmm…… 于是&#xff0c;我默默打开了自己的Matlab&#xff0c;用TheColor工具箱的图片主题色提取功…

数据驱动的商业决策:BI在企业中的重要性

第一章&#xff1a;引言 在当今数字化时代&#xff0c;数据被广泛应用于各个行业和领域。对企业而言&#xff0c;数据是一项宝贵的资源&#xff0c;可以为其带来无限的商机和竞争优势。然而&#xff0c;海量的数据本身并不具备实际意义&#xff0c;只有通过有效的数据分析和洞…

亚马逊云科技中国峰会:Amazon DeepRacer-梦想加速度

零&#xff1a;前言 你是否憧憬在赛车赛道上开车&#xff0c;享受疾驰而过的感觉&#xff0c;感受无与伦比的驾驶乐趣&#xff1f; Amazon DeepRacer可以满足你的梦想&#xff0c;虚竹哥带你了解Amazon DeepRacer。 它为用户提供了一个虚拟仿真环境和一个真实赛车模型&#xf…

【JDK环境配置】| 两种JDK环境能在同一台电脑共存吗?(文末送书)

目录 &#x1f981; 前言&#x1f981; 基础环境&#x1f981; 安装JDK1.8Ⅰ. 下载Ⅱ. 安装 &#x1f981; 在项目里更改JDK版本---------------------------------------------福利在下面--------------------------------------------------&#x1f981; 福利&#xff08;送…

《基于同态加密和秘密分享的纵向联邦LR协议研究》论文阅读

论文地址&#xff1a;https://xueshu.baidu.com/usercenter/paper/show?paperid1b7e04e0r41x0ax0976q0gy0m5242465 摘要 提出了一种新颖的两方纵向联邦逻辑回归协议,并在半诚实安全模型下证明了该协议的安全性, 包括模型训练流程和模型推理流程的安全性,且无需对非线性函数使…

C++四种基本类型转换

C四种基本类型转换 1.static_cast2.const_cast3.reinterpret_cast4 .dynamic_cast 1.static_cast 用法: static_cast<type_name> (expression) 说明:该运算符把expression转换为typen_name类型&#xff0c;static_cast在编译时使用类型信息执行转换,在转换执行必要的检测…

spring事务源码详解-spring原码(一)

前面说过了aop源码&#xff0c;这里再稍微回顾一下 我们会用注解EnableAspectJautoProxy开启aop 当我们用了proxytargetClass会强制cglib动态代理 源码里有Import 里面会注册AnnotionAwareAspectJAutoProxyCreator 后面会在beanDefinationMap获取到所有定义的Objects循环 …

2020新基建决赛-crypto-onepiece

onepiece 一、概要 1、标题&#xff1a;onepiece 2、关键字&#xff1a;e2&#xff0c;rabin&#xff0c;凯撒 3、比赛&#xff1a;2020新基建决赛 4、工具&#xff1a;python&#xff0c;米斯特工具 二、开始 1、题目分析 题目给了一个pubkey.pem和onepiece.enc&#xff…

C++右值引用 移动语义 完美转发 引用叠加

右值引用 MyString浅拷贝与深拷贝浅赋值与深赋值 左值与右值左值概念左值右值与函数的结合移动构造函数移动赋值函数移动构造和移动赋值的应用 移动语义 有点问题完美转发引用叠加 MyString 浅拷贝与深拷贝 s1先在堆区申请了空间&#xff0c;然后将p指针指向的字符串复制到该…

设计模式之责任链模式笔记

设计模式之责任链模式笔记 说明Chain of Responsibility(责任链)目录责任链模式示例类图请假条类抽象处理者类小组长类部门经理类总经理类测试类 说明 记录下学习设计模式-责任链模式的写法。JDK使用版本为1.8版本。 Chain of Responsibility(责任链) 意图:使多个对象都有机…

Vue搜索组件,显示热门、近期搜索(结合element ui)

&#x1f680; 注重版权&#xff0c;转载请注明原作者和原文链接 &#x1f96d; 作者&#xff1a;全栈小袁 &#x1f34e; 原创个人开源博客项目(目前V3.0版本)&#xff1a;https://github.com/yuanprogrammer/xiaoyuanboke &#x1f349; 开源项目觉得还行的话点点star&#x…

【P4】Windows 下搭建 DVWA 及命令注入漏洞详解

文章目录 一、Windows 下搭建 DVWA1.1、DVWA 靶场搭建1.2、六步快速搭建 DVWA1.2.1、下载并安装 PHPstudy&#xff1a;http://public.xp.cn/upgrades/PhpStudy2018.zip1.2.2、将解压后的 DVWA 原代码放置 phpstudy 安装目录的 WWW文件夹1.2.3、进入 DVWA/config 目录&#xff0…

2022前端趋势报告(下)

前端博主&#xff0c;热衷各种前端向的骚操作&#xff0c;经常想到哪就写到哪&#xff0c;如果有感兴趣的技术和前端效果可以留言&#xff5e;博主看到后会去代替大家踩坑的&#xff5e; 主页: oliver尹的主页 格言: 跌倒了爬起来就好&#xff5e; 一、前言 本文内容来自于《St…

springBoot学习——spring+springMVC 集成mybatis 拦截器

目录 引出入门案例&#xff1a;登陆和注册 & 用户信息分页 之 固定的步骤&#xff1a;&#xff08;1&#xff09;建普通项目配置pom.xml文件&#xff08;2&#xff09;写主启动类 application.yml文件【bug】pom.xml文件导了mybatis的包&#xff0c;但是application.yml文…

Drag Your GAN论文解读,基于点的交互式操作拖动到生成图像[DragGAN]

只需要鼠标的点击就可以自动修图的产品&#xff0c;火爆问世&#xff0c;可以说是超越PS&#xff0c;神一般的存在了&#xff0c;而且没有门槛&#xff0c;对于普通大众来说直接可以上手使用&#xff0c;这个是PS完全不具备的。更关键的是&#xff0c;这款产品跟PS明显区别在于…

如何系统地自学 Python?

&#x1f482; 个人网站:【海拥】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 目录 前言为什么选择Python作…

【Intel 黑客松大赛】基于YOLO的杂草-农作物检测分类系统

目录 一、赛题简介&#xff1a;计算机视觉挑战——检测并清除杂草二、基于YOLO的杂草-农作物检测分类2.1、YOLO简介2.2、基于YOLO的杂草-农作物检测分类解决方案 三、基于YOLO的杂草-农作物检测分类系统设计3.1、基于flask框架的demo应用程序后端3.2、基于Vue框架的demo应用程序…

Qt6.2教程——4.QT常用控件QPushButton

一&#xff0c;QPushButton简介 QPushButton是Qt框架中的一种基本控件&#xff0c;它是用户界面中最常见和最常用的控件之一。QPushButton提供了一个可点击的按钮&#xff0c;用户可以通过点击按钮来触发特定的应用程序操作。比如&#xff0c;你可能会在一个对话框中看到"…

Unity编辑器扩展-第七集-应用键/显示提示词

第六集链接&#xff1a;Unity编辑器扩展-第六集-创建窗口/批量填图_菌菌巧乐兹的博客-CSDN博客 一、本节目标效果展示 1.我们有时候需要多次使用编辑窗口&#xff0c;但是每次一点执行&#xff0c;就关掉了&#xff0c;就很烦&#xff0c;所以我们希望&#xff0c;点击按钮&…

Spring Bean的实例化过程

一、前言 对于写Java的程序员来说&#xff0c;Spring已经成为了目前最流行的第三方开源框架之一&#xff0c;在我们充分享受Spring IOC容器带来的红利的同时&#xff0c;我们也应该考虑一下Spring这个大工厂是如何将一个个的Bean生产出来的&#xff0c;本期我们就一起来讨论一…