spring5/springboot2源码学习 -- MessageSource

概念

在spring中,MessageSource接口用于抽象对信息的定义,相当于是信息的提供者。比如,在web系统中,我们经常定义ResourceBundle来处理国际化相关的文案下发。在spring中,把从消息标识转化为具体的字符串的这一过程,抽象成了MessageSource接口,使可以更方便的实现消息的参数化和国际化。

类个层级结构

先看看MessageSource的定义:

public interface MessageSource {
	//根据code,参数,默认值,locale获取消息
  String getMessage(String code, @Nullable Object[] args, @Nullable String defaultMessage, Locale locale);
	//基本跟上面方法一直,只是没有默认消息
  String getMessage(String code, @Nullable Object[] args, Locale locale) throws NoSuchMessageException;
	//
  String getMessage(MessageSourceResolvable resolvable, Locale locale) throws NoSuchMessageException;
}

我们再看看这个MessageSourceResolvable又是啥

public interface MessageSourceResolvable {
	//code有多个,用于在第一个找不到时候,再去找第二个第三个..
  String[] getCodes();
  default Object[] getArguments() {
    return null;
  }
  default String getDefaultMessage() {
    return null;
  }
}

可以看到这个MessageSourceResolvable其实就是对获取message时,那几个参数的封装,不过是code可以有多个,相当于一种fallback机制。

整个类的层级结构:

在这里插入图片描述

实现

  • ResourceBundleMessageSource:以一组properties文件组成的ResourceBundle来作为message的消息源
  • ReloadableResourceBundleMessageSource:可以重载的message消息源。源可以是properties文件或者是xml文件
  • StaticMessageSource:提供编程式添加message的方法,不依赖文件提供消息源。其实没啥用
  • DelegatingMessageSource:自己不实现查找message的功能,而是通过在内部聚合一个别的MessageSource来实现功能

结语

(水平有限,最近在看spring源码,分享学习过程,希望对各位有点微小的帮助。如有错误,请指正~)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值