本發(fā)明涉及計算機軟件應用技術(shù)領域,具體涉及一種適用通配符模式的國際化資源文件的配置方法,一種適用通配符模式的SpringMVC國際化資源文件的配置方法。
背景技術(shù):
Spring MVC屬于SpringFrameWork的后續(xù)產(chǎn)品,已經(jīng)融合在Spring Web Flow里面。Spring 框架提供了構(gòu)建 Web 應用程序的全功能 MVC 模塊。使用 Spring 可插入的 MVC 架構(gòu),可以選擇是使用內(nèi)置的 Spring Web 框架還可以是 Struts 這樣的 Web 框架。
Spring MVC 是Spring框架最重要的的模塊之一。它以強大的Spring IoC容器為基礎,并充分利用容器的特性來簡化它的配置。
模型-視圖-控制器(MVC)是一個眾所周知的以設計界面應用程序為基礎的設計模式。它主要通過分離模型、視圖及控制器在應用程序中的角色將業(yè)務邏輯從界面中解耦。通常,模型負責封裝應用程序數(shù)據(jù)在視圖層展示。視圖僅僅只是展示這些數(shù)據(jù),不包含任何業(yè)務邏輯??刂破髫撠熃邮諄碜杂脩舻恼埱?,并調(diào)用后臺服務(manager或者dao)來處理業(yè)務邏輯。處理后,后臺業(yè)務層可能會返回了一些數(shù)據(jù)在視圖層展示??刂破魇占@些數(shù)據(jù)及準備模型在視圖層展示。MVC模式的核心思想是將業(yè)務邏輯從界面中分離出來,允許它們單獨改變而不會相互影響。
SpringMVC提供了很強大的容器管理功能,同時也給用戶提供了國際化資源的方法,但通用的方法很難適用于所有場景。SpringMVC提供的國際化方法中的ResourceBundleMessageSource類的baseNames屬性指定資源文件的指定路徑;而另一個類PropertiesPlaceHolderConfigure的locations屬性則可以適用通配符模式指定加載資源文件。
基于maven或者gradle構(gòu)建的項目大多包含很多子模塊。當一個web項目配置國際化資源的時候,由于眾多子項目的存在,國際化資源文件的配置就顯得冗余了,而且每次創(chuàng)建或者刪除項目的時候都需要去applicationContext.xml中去增加或者刪除資源文件的路徑地址。
技術(shù)實現(xiàn)要素:
本發(fā)明要解決的技術(shù)問題是:本發(fā)明針對以上問題,提供一種適用通配符模式的國際化資源文件的配置方法,主要是為了基于maven或者gradle構(gòu)建的web項目的國際化資源配置可以適用于通配符模式,方便代碼的開發(fā)維護,可以讓spring自己去讀取特定路徑下的所有資源,而不需要手動一一添加了。
本發(fā)明所采用的技術(shù)方案為:
一種適用通配符模式的國際化資源文件的配置方法,所述方法通過在springMVC中新寫一個類,繼承于springMVC的ResourceBundleMessageSource類,并添加locations屬性,然后在setLocations方法中將location屬性轉(zhuǎn)化為baseName屬性并傳值給父類,這樣就可以實現(xiàn)通配符模式適配了。
所述方法相關(guān)代碼如下:
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>。
本發(fā)明的有益效果為:
本發(fā)明適用通配符模式的SpringMVC國際化資源文件,可以讓spring自己去讀取特定路徑下的所有資源,而不需要手動一一添加,方便代碼的開發(fā)維護。
具體實施方式
下面結(jié)合具體實施方式對本發(fā)明進一步說明:
實施例1:
一種適用通配符模式的國際化資源文件的配置方法,其特征在于,所述方法通過在springMVC中新寫一個類,繼承于springMVC的ResourceBundleMessageSource類,并添加locations屬性,然后在setLocations方法中將location屬性轉(zhuǎn)化為baseName屬性并傳值給父類,這樣就可以實現(xiàn)通配符模式適配了。
實施例2
在實施例1的基礎上,本實施例所述方法相關(guān)代碼如下:
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>。
實施方式僅用于說明本發(fā)明,而并非對本發(fā)明的限制,有關(guān)技術(shù)領域的普通技術(shù)人員,在不脫離本發(fā)明的精神和范圍的情況下,還可以做出各種變化和變型,因此所有等同的技術(shù)方案也屬于本發(fā)明的范疇,本發(fā)明的專利保護范圍應由權(quán)利要求限定。