从外部文件夹加载Spring资源类

从外部文件夹加载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"&

我有一个spring项目名称:SpringExample‬

目录结构:

spring的locale.xml:

<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>