一种适用通配符模式的国际化资源文件的配置方法与流程

文档序号:12176423阅读:348来源:国知局

本发明涉及计算机软件应用技术领域,具体涉及一种适用通配符模式的国际化资源文件的配置方法,一种适用通配符模式的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>。

实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1