refresh() -> initMessageSource()

refresh() -> initMessageSource()

国际化处理,为上下文初始化message源,即不同语言的消息体

protected void initMessageSource() {
  // 获取bean工厂,一般是DefaultListableBeanFactory
  ConfigurableListableBeanFactory beanFactory = getBeanFactory();
  // 首先判断是否已有xml文件定义了id为messageSource的bean对象
  if (beanFactory.containsLocalBean(MESSAGE_SOURCE_BEAN_NAME)) {
    // 如果有,则从BeanFactory中获取这个对象
    this.messageSource = beanFactory.getBean(MESSAGE_SOURCE_BEAN_NAME, MessageSource.class);
    // Make MessageSource aware of parent MessageSource.
    // 当父类bean工厂不为空,并且这个bean对象是HierarchicalMessageSource类型
    if (this.parent != null && this.messageSource instanceof HierarchicalMessageSource) {
      // 类型强制转换,转换为HierarchicalMessageSource的类型
      HierarchicalMessageSource hms = (HierarchicalMessageSource) this.messageSource;
      // 判断父类的messageSource是否为空,如果等于空,则设置父类的messageSource
      if (hms.getParentMessageSource() == null) {
        // Only set parent context as parent MessageSource if no parent MessageSource
        // registered already.
        hms.setParentMessageSource(getInternalParentMessageSource());
      }
    }
    if (logger.isTraceEnabled()) {
      logger.trace("Using MessageSource [" + this.messageSource + "]");
    }
  }
  else {
    // Use empty MessageSource to be able to accept getMessage calls.
    // 如果没有xml文件定义信息源对象,新建DelegatingMessageSource类作为messageSource的bean
    DelegatingMessageSource dms = new DelegatingMessageSource();
    // 给这个DelegatingMessageSource添加父类消息源
    dms.setParentMessageSource(getInternalParentMessageSource());
    this.messageSource = dms;
    // 将这个messageSource实例注册到bean工厂中
    beanFactory.registerSingleton(MESSAGE_SOURCE_BEAN_NAME, this.messageSource);
    if (logger.isTraceEnabled()) {
      logger.trace("No '" + MESSAGE_SOURCE_BEAN_NAME + "' bean, using [" + this.messageSource + "]");
    }
  }
}

该方法主要判断以及添加MessageSource对象,国际化具体实现在springmvc的时候通过国际化的代码进行解读

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值