从外部文件夹加载Spring资源类
我有一个spring项目名称:SpringExample 目录结构: spring的locale.xml:从外部文件夹加载Spring资源类,spring,resources,message,Spring,Resources,Message,我有一个spring项目名称:SpringExample 目录结构: spring的locale.xml: <bean id="customerService" class="com.mkyong.customer.services.CustomerService" /> <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"&
<bean id="customerService" class="com.mkyong.customer.services.CustomerService" />
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename">
<value>\SpringExample\conf\messages</value>
</property>
</bean>
应用程序类(主类)的代码:
但是它无法绑定properti文件,因为它不在包中。
我得到一个例外:
警告:找不到的ResourceBundle[\SpringExample\conf?\messages]
MessageSource:找不到基名称的捆绑包
\SpringExample\conf?\messages,语言环境
如何使其与外部文件夹资源绑定,如我的示例中所示?将
conf
目录设置为maven资源目录(maven build helper插件),或将文件从conf
移动到src\main\resources
。然后修改ResourceBundleMessageSource
以从类路径根加载消息,因为src\main\resources
对应于类路径根
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename">
<value>messages</value>
</property>
</bean>
信息
注意:如果您使用
ReloadableResourceBundleMessageSource
而不是ResourceBundleMessageSource
,则必须使用前缀classpath:
作为basename
属性值(classpath:messages
)否。我不希望它作为资源文件,我是使用maven Resources完成的。我认为您不必将“classpath:”放在属性的值标记中。从没有类路径前缀的类路径解析资源。@Justin Wrobel:你是对的,我总是对ResourceBundleMessageSource
和ReloadableResourceBundleMessageSource
的不同语法有问题--我更正了答案
package com.mkyong.common;
import java.util.Locale;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.mkyong.customer.services.CustomerService;
public class App {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext(
new String[] { "locale.xml" });
// get the message resource inside context
String name = context.getMessage("customer.name", new Object[] { 28,
"http://www.mkyong.com" }, Locale.US);
System.out.println("Customer name (English) : " + name);
// get the message resource inside the bean
CustomerService cust = (CustomerService) context
.getBean("customerService");
cust.printMessage();
}
}
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename">
<value>messages</value>
</property>
</bean>