• spring5.0 源码解析(day05) initMessageSource();


    @[TOC](spring5.0 源码解析(day04) initMessageSource()😉

    initMessageSource 使用

    该方法主要 对上下文的消息来源进行初始化

    1. 我们先在项目中创建国际化文件
      在这里插入图片描述
    2. 在配置类中增加如下配置
    @Bean(name = "messageSource")
    	public MessageSource getMessageSource() {
    		ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
    		messageSource.setDefaultEncoding("UTF-8");
    		messageSource.addBasenames("message", "message_en");
    		return messageSource;
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    1. 通过容器获取 messageSource
    MessageSource messageSource = applicationContext.getBean(MessageSource.class);
    		String zhMessage = messageSource.getMessage("base.response.success.msg", null, null, Locale.CHINA);
    		String enMessage = messageSource.getMessage("base.response.fail.msg", null, null, Locale.ENGLISH);
    		System.out.println("zhMessage = " + zhMessage);
    		System.out.println("enMessage = " + enMessage);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    1. 启动项目打印结果
    zhMessage = 成功
    enMessage = fail
    
    • 1
    • 2

    initMessageSource 解析

    在 initMessageSource 方法中 我们可以看到,先检查beanFactory是否存在messageSource 的bean,不存在则初始化一个默认的messageSource 防止 getMessage 调用是出现问题

    ConfigurableListableBeanFactory beanFactory = getBeanFactory();
    		// Bean 的名称必须要是 messageSource
    		if (beanFactory.containsLocalBean(MESSAGE_SOURCE_BEAN_NAME)) {
    			this.messageSource = beanFactory.getBean(MESSAGE_SOURCE_BEAN_NAME, MessageSource.class);
    			// 让 MessageSource 知道父 MessageSource.
    			if (this.parent != null && this.messageSource instanceof HierarchicalMessageSource) {
    				HierarchicalMessageSource hms = (HierarchicalMessageSource) this.messageSource;
    				if (hms.getParentMessageSource() == null) {
    					// 如果尚未注册父消息源,则仅将父上下文设置为父消息源。
    					// 已经注册.
    					hms.setParentMessageSource(getInternalParentMessageSource());
    				}
    			}
    			if (logger.isTraceEnabled()) {
    				logger.trace("Using MessageSource [" + this.messageSource + "]");
    			}
    		}
    		else {
    			// 使用空的 MessageSource 能够接受 getMessage 调用.
    			DelegatingMessageSource dms = new DelegatingMessageSource();
    			dms.setParentMessageSource(getInternalParentMessageSource());
    			this.messageSource = dms;
    			beanFactory.registerSingleton(MESSAGE_SOURCE_BEAN_NAME, this.messageSource);
    			if (logger.isTraceEnabled()) {
    				logger.trace("No '" + MESSAGE_SOURCE_BEAN_NAME + "' bean, using [" + this.messageSource + "]");
    			}
    		}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
  • 相关阅读:
    基于粒子群优化算法的微型燃气轮机冷热电联供系统优化调度(Matlab代码实现)
    分布式搜索引擎 ElasticSearch(ES)
    matlab实现了一个基于粒子群优化(PSO)算法的程序,用于寻找一种三层材料结构的最佳配置
    Making Anti-Palindromes
    SRAM之ECC检测机制
    Vue框架分享与总结
    【Verilog】画出下列wave信号波形图
    MySQL忘记密码怎么办
    dvwa靶机与web漏洞扫描(vega)
    redis集群中节点fail,noaddr
  • 原文地址:https://blog.csdn.net/qq_44808472/article/details/126184231