Spring MVC:覆盖默认的MessageSource对象

时间:2013-10-11 07:52:12

标签: java spring-mvc internationalization

由于this article和文档:

  

在Spring容器初始化期间,如果有任何实现的类   在MessageSourceAware接口中,Spring会自动注入   MessageSource通过setMessageSource(MessageSource)进入类   messageSource)setter方法。

但该对象的访问方法并不那么有用,所以我想覆盖该接口并添加一些更有用的方法:

public class MessageSourceEx implements org.springframework.context.MessageSource {

    /**
     * 
     */
    @Override
    public String getMessage(MessageSourceResolvable source, Locale locale)
            throws NoSuchMessageException {
        return this.getMessage(source, locale);
    }

    /**
     * 
     */
    @Override
    public String getMessage(String key, Object[] params, Locale locale)
            throws NoSuchMessageException {
        return this.getMessage(key, params, locale);
    }

    /**
     * 
     */
    @Override
    public String getMessage(String key, Object[] params, String locale, Locale locale2) {
        return this.getMessage(key, params, locale, locale2);
    }

    /**
     * 
     * @param locale Locale
     * @param key Key
     * @param params Parameters
     * @return
     */
    public String getMessage(Locale locale, String key, Object... params) {
        return this.getMessage(key, new Object[] {params}, locale);
    }

    /**
     * 
     * @param locale Locale
     * @param key Key
     * @return
     */
    public String getMessage(Locale locale, String key) {
        return this.getMessage(key, null, locale);
    }
}

但问题是MessageSourceAware接口需要完全针对MessageSource的setter方法,并且不能将我的覆盖类作为参数。从另一方面我不能将MessageSource强制转换为我的对象 - 它失败了例外..

是否有可能实施这样的事情?

谢谢

1 个答案:

答案 0 :(得分:3)

一般不了解您的问题。 来自MessageSourceAware JavaDocs:

  

由希望得到通知的任何对象实现的接口     它运行的MessageSource(通常是ApplicationContext)。     

请注意,MessageSource通常也可以作为bean传递     引用(对任意bean属性或构造函数参数),因为     它在应用程序上下文中定义为名为“messageSource”的bean。

因此,只需将您的实现配置为 messageSource bean:

<bean id="messageSource" class="com.my.proj.FooMessageSource"/>

您的服务应该实现MessageSourceAware。 当然,如果需要,您可以在这些课程中将MessageSource投射到您的实施中。

文档在这里:Internationalization using MessageSource