由于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强制转换为我的对象 - 它失败了例外..
是否有可能实施这样的事情?
谢谢
答案 0 :(得分:3)
一般不了解您的问题。
来自MessageSourceAware
JavaDocs:
由希望得到通知的任何对象实现的接口 它运行的MessageSource(通常是ApplicationContext)。
请注意,MessageSource通常也可以作为bean传递 引用(对任意bean属性或构造函数参数),因为 它在应用程序上下文中定义为名为“messageSource”的bean。
因此,只需将您的实现配置为 messageSource bean:
<bean id="messageSource" class="com.my.proj.FooMessageSource"/>
您的服务应该实现MessageSourceAware
。
当然,如果需要,您可以在这些课程中将MessageSource
投射到您的实施中。