spring messagesource 动态指定资源文件

      由于项目是使用的maven模块化的项目,各个模块都分别打包成jar最终被web可部署项目依赖,由于项目中用过了spring messagesource 资源国际化,而messagesource在spring中的配置仅此一份,为了使资源文件可以动态指定,所以对ResourceBundleMessageSource进行了扩展。代码如下:

public class GapResourceBundleMessageSource extends ResourceBundleMessageSource {

	@Override
	public void setBasenames(final String ... basenames) {
		List<String> list = new LinkedList<String>();
		if (ArrayUtils.isNotEmpty(basenames)) {
			for (String baseName : basenames) {
				if (StringUtils.isNotEmpty(baseName)) {
					if (baseName.contains(",")) {
						String[] bases = baseName.split(",");
						for (String base : bases) {
							list.add(base);
						}
					} else {
						list.add(baseName);
					}
				}
			}
		}
		String[] bases = new String[list.size()];
		list.toArray(bases);
		list.clear();
		list = null;
		super.setBasenames(bases);
	}
}

    我们在配置文件中这样配置:

   

<bean id="messageSource" class="cn.evun.gap.core.spring.GapResourceBundleMessageSource">
		<property name="basenames">
			<list><value>${i18n.message}</value></list>
		</property>
		<property name="useCodeAsDefaultMessage" value="true" />
</bean>

    其中,i18n.message的格式为i18n.message=i18n/aaa,i18n/bbb,i18n/ccc...。

    这样,我们就可以通过修改i18n.messsage的值来达到动态指定资源文件而无需去修改原生配置文件了

你可能感兴趣的:(spring messagesource 动态指定资源文件)