/** * 配置基于配置的MessageSource */ private void configureMessageSource() { // MessageSource bean name String messageSourceBeanName = AbstractApplicationContext.MESSAGE_SOURCE_BEAN_NAME; // Config MessageSource bean name String configMessageSourceBeanName = CONFIG_MESSAGE_SOURCE_BEAN_NAME; // 基于配置服务的MessageSource ConfigMessageSource configMessageSource = beanFactory.getBean(configMessageSourceBeanName, ConfigMessageSource.class); // 如果已经存在MessageSource bean,则将ConfigMessageSource设置为messageSource的parent,将messageSource原来的parent设置为ConfigMessageSource的parent if (beanFactory.containsLocalBean(messageSourceBeanName)) { MessageSource messageSource = beanFactory.getBean(messageSourceBeanName, MessageSource.class); if (messageSource instanceof HierarchicalMessageSource) { HierarchicalMessageSource hms = (HierarchicalMessageSource) messageSource; MessageSource pms = hms.getParentMessageSource(); hms.setParentMessageSource(configMessageSource); configMessageSource.setParentMessageSource(pms); } } else { beanFactory.registerSingleton(messageSourceBeanName, configMessageSource); } }
@RefreshScope @Bean public HierarchicalMessageSource messageSource() { final CasReloadableMessageBundle bean = new CasReloadableMessageBundle(); bean.setDefaultEncoding(casProperties.getMessageBundle().getEncoding()); bean.setCacheSeconds(casProperties.getMessageBundle().getCacheSeconds()); bean.setFallbackToSystemLocale(casProperties.getMessageBundle().isFallbackSystemLocale()); bean.setUseCodeAsDefaultMessage(casProperties.getMessageBundle().isUseCodeMessage()); bean.setBasenames(casProperties.getMessageBundle().getBaseNames()); return bean; }
/** * Initialize the MessageSource. * Use parent's if none defined in this context. */ protected void initMessageSource() { ConfigurableListableBeanFactory beanFactory = getBeanFactory(); if (beanFactory.containsLocalBean(MESSAGE_SOURCE_BEAN_NAME)) { this.messageSource = beanFactory.getBean(MESSAGE_SOURCE_BEAN_NAME, MessageSource.class); // Make MessageSource aware of parent MessageSource. if (this.parent != null && this.messageSource instanceof HierarchicalMessageSource) { HierarchicalMessageSource hms = (HierarchicalMessageSource) this.messageSource; if (hms.getParentMessageSource() == null) { // Only set parent context as parent MessageSource if no parent MessageSource // registered already. hms.setParentMessageSource(getInternalParentMessageSource()); } } if (logger.isDebugEnabled()) { logger.debug("Using MessageSource [" + this.messageSource + "]"); } } else { // Use empty MessageSource to be able to accept getMessage calls. DelegatingMessageSource dms = new DelegatingMessageSource(); dms.setParentMessageSource(getInternalParentMessageSource()); this.messageSource = dms; beanFactory.registerSingleton(MESSAGE_SOURCE_BEAN_NAME, this.messageSource); if (logger.isDebugEnabled()) { logger.debug("Unable to locate MessageSource with name '" + MESSAGE_SOURCE_BEAN_NAME + "': using default [" + this.messageSource + "]"); } } }
/** * Initialize the MessageSource of the given theme with the * one from the corresponding parent of this ThemeSource. * @param theme the Theme to (re-)initialize */ protected void initParent(Theme theme) { if (theme.getMessageSource() instanceof HierarchicalMessageSource) { HierarchicalMessageSource messageSource = (HierarchicalMessageSource) theme.getMessageSource(); if (getParentThemeSource() != null && messageSource.getParentMessageSource() == null) { Theme parentTheme = getParentThemeSource().getTheme(theme.getName()); if (parentTheme != null) { messageSource.setParentMessageSource(parentTheme.getMessageSource()); } } } }
HierarchicalMessageSource resolveRootMessageSource(MessageSource messageSource) { if (messageSource instanceof HierarchicalMessageSource) { MessageSource parent = ((HierarchicalMessageSource) messageSource).getParentMessageSource(); return parent != null ? resolveRootMessageSource(parent) : (HierarchicalMessageSource) messageSource; } else { return null; } }
public RestHandlerExceptionResolver build() { if (withDefaultMessageSource) { if (messageSource != null) { // set default message source as top parent HierarchicalMessageSource messages = resolveRootMessageSource(messageSource); if (messages != null) { messages.setParentMessageSource(createDefaultMessageSource()); } } else { messageSource = createDefaultMessageSource(); } } if (withDefaultHandlers) { // add default handlers putAllIfAbsent(exceptionHandlers, getDefaultHandlers()); } // initialize handlers for (RestExceptionHandler handler : exceptionHandlers.values()) { if (messageSource != null && handler instanceof MessageSourceAware) { ((MessageSourceAware) handler).setMessageSource(messageSource); } if (messageInterpolator != null && handler instanceof MessageInterpolatorAware) { ((MessageInterpolatorAware) handler).setMessageInterpolator(messageInterpolator); } } RestHandlerExceptionResolver resolver = new RestHandlerExceptionResolver(); resolver.setExceptionHandlers((Map) exceptionHandlers); if (httpMessageConverters != null) { resolver.setMessageConverters(httpMessageConverters); } if (contentNegotiationManager != null) { resolver.setContentNegotiationManager(contentNegotiationManager); } if (defaultContentType != null) { resolver.setDefaultContentType(defaultContentType); } resolver.afterPropertiesSet(); return resolver; }