本发明涉及计算机软件应用技术领域,具体涉及一种适用通配符模式的国际化资源文件的配置方法,一种适用通配符模式的SpringMVC国际化资源文件的配置方法。
背景技术:
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还可以是 Struts 这样的 Web 框架。
Spring MVC 是Spring框架最重要的的模块之一。它以强大的Spring IoC容器为基础,并充分利用容器的特性来简化它的配置。
模型-视图-控制器(MVC)是一个众所周知的以设计界面应用程序为基础的设计模式。它主要通过分离模型、视图及控制器在应用程序中的角色将业务逻辑从界面中解耦。通常,模型负责封装应用程序数据在视图层展示。视图仅仅只是展示这些数据,不包含任何业务逻辑。控制器负责接收来自用户的请求,并调用后台服务(manager或者dao)来处理业务逻辑。处理后,后台业务层可能会返回了一些数据在视图层展示。控制器收集这些数据及准备模型在视图层展示。MVC模式的核心思想是将业务逻辑从界面中分离出来,允许它们单独改变而不会相互影响。
SpringMVC提供了很强大的容器管理功能,同时也给用户提供了国际化资源的方法,但通用的方法很难适用于所有场景。SpringMVC提供的国际化方法中的ResourceBundleMessageSource类的baseNames属性指定资源文件的指定路径;而另一个类PropertiesPlaceHolderConfigure的locations属性则可以适用通配符模式指定加载资源文件。
基于maven或者gradle构建的项目大多包含很多子模块。当一个web项目配置国际化资源的时候,由于众多子项目的存在,国际化资源文件的配置就显得冗余了,而且每次创建或者删除项目的时候都需要去applicationContext.xml中去增加或者删除资源文件的路径地址。
技术实现要素:
本发明要解决的技术问题是:本发明针对以上问题,提供一种适用通配符模式的国际化资源文件的配置方法,主要是为了基于maven或者gradle构建的web项目的国际化资源配置可以适用于通配符模式,方便代码的开发维护,可以让spring自己去读取特定路径下的所有资源,而不需要手动一一添加了。
本发明所采用的技术方案为:
一种适用通配符模式的国际化资源文件的配置方法,所述方法通过在springMVC中新写一个类,继承于springMVC的ResourceBundleMessageSource类,并添加locations属性,然后在setLocations方法中将location属性转化为baseName属性并传值给父类,这样就可以实现通配符模式适配了。
所述方法相关代码如下:
public class ResourceBundleMessageSource extends
org.springframework.context.support.ResourceBundleMessageSource {
private Resource[] locations;
/**
* @param locations the locations to set
*/
public void setLocations(Resource[] locations) {
this.locations = locations;
List<String> bns = new ArrayList<>();
for(int i=0;i<locations.length;i++) {
String filePath = locations[i].getURL().getFile().split("/WEB-INF/classes")[1];
String baseName = "i18n/" + filePath.substring(0, filePath.length() - 14);
if (!bns.contains(baseName)) {
bns.add(baseName);
}
}
String[] basenames = new String[bns.size()];
for (int j = 0; j < bns.size(); j++) {
basenames[j] = bns.get(j);
}
super.setBasenames(basenames);
}
}
所述方法采用的配置文件如下:
<bean id="messageSource" class="com.inspur.cloudframework.spring.context.support.ResourceBundleMessageSource">
<property name="locations">
<list>
<value>classpath*:/i18n/*</value>
</list>
</property>
<property name="defaultEncoding" value="UTF-8"/>
<property name="useCodeAsDefaultMessage" value="true"/>
</bean>。
本发明的有益效果为:
本发明适用通配符模式的SpringMVC国际化资源文件,可以让spring自己去读取特定路径下的所有资源,而不需要手动一一添加,方便代码的开发维护。
具体实施方式
下面结合具体实施方式对本发明进一步说明:
实施例1:
一种适用通配符模式的国际化资源文件的配置方法,其特征在于,所述方法通过在springMVC中新写一个类,继承于springMVC的ResourceBundleMessageSource类,并添加locations属性,然后在setLocations方法中将location属性转化为baseName属性并传值给父类,这样就可以实现通配符模式适配了。
实施例2
在实施例1的基础上,本实施例所述方法相关代码如下:
public class ResourceBundleMessageSource extends
org.springframework.context.support.ResourceBundleMessageSource {
private Resource[] locations;
/**
* @param locations the locations to set
*/
public void setLocations(Resource[] locations) {
this.locations = locations;
List<String> bns = new ArrayList<>();
for(int i=0;i<locations.length;i++) {
String filePath = locations[i].getURL().getFile().split("/WEB-INF/classes")[1];
String baseName = "i18n/" + filePath.substring(0, filePath.length() - 14);
if (!bns.contains(baseName)) {
bns.add(baseName);
}
}
String[] basenames = new String[bns.size()];
for (int j = 0; j < bns.size(); j++) {
basenames[j] = bns.get(j);
}
super.setBasenames(basenames);
}
}
实施例3
在实施例2的基础上,本实施例所述方法采用的配置文件如下:
<bean id="messageSource" class="com.inspur.cloudframework.spring.context.support.ResourceBundleMessageSource">
<property name="locations">
<list>
<value>classpath*:/i18n/*</value>
</list>
</property>
<property name="defaultEncoding" value="UTF-8"/>
<property name="useCodeAsDefaultMessage" value="true"/>
</bean>。
实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。