【问题标题】:Spring MVC: override default MessageSource objectSpring MVC:覆盖默认 MessageSource 对象
【发布时间】:2013-10-11 07:52:11
【问题描述】:

由于this article 和文档:

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

但是那个对象的访问方法不是很有用,所以我想重写那个接口并添加一些更有用的方法:

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 强制转换为我的对象 - 它失败并出现异常。 .

这样的事情可以实现吗?

谢谢

【问题讨论】:

    标签: java spring-mvc internationalization


    【解决方案1】:

    一般不理解您的问题。 来自MessageSourceAwareJavaDocs:

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

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

    所以,只需将您的实现配置为 messageSource bean:

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

    你的服务应该只实现MessageSourceAware。 当然,如果需要,您可以在这些类中将 MessageSource 转换为您的实现。

    文档在这里:Internationalization using MessageSource

    【讨论】:

    • just configure your implementation as messageSource bean - 你是什么意思?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2011-01-20
    相关资源
    最近更新 更多