Spring で MessageSource を使用してテキスト メッセージを挿入しようとしています。私が書いたプログラムは正常にコンパイルされますが、.properties ファイルから適切な値を取得する代わりに、常にデフォルト メッセージを出力します。私にはまったく手がかりがありません。
テキストを挿入しようとする Circle クラスは次のとおりです。
@Component
public class Circle implements Shape {
@Resource
private Point center;
@Autowired
private MessageSource messageSource;
public MessageSource getMessageSource() {
return messageSource;
}
public void setMessageSource(MessageSource messageSource) {
this.messageSource = messageSource;
}
public Point getCenter() {
return center;
}
public void setCenter(Point center) {
this.center = center;
}
@Override
public void draw() {
System.out.println(this.messageSource.getMessage("greeting", null, "Default Greeting", null));
System.out.println(this.messageSource.getMessage("draw.circle", new Object[] {center.getX(), center.getY()}, "Required Drawing", null));
}
そして、これが Bean 構成ファイルの一部です。
...
<bean id="center" class="java.awt.Point">
<constructor-arg value="0" />
<constructor-arg value="-20" />
</bean>
<bean id="messageSourse" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename">
<value>messages</value>
</property>
</bean>
<context:component-scan base-package="com.myproject.spring"/>
<context:annotation-config/>
そして、メッセージと draw.circle を messages.properties ファイルに保存し、メイン クラスを作成しました。しかし、出力は常に次のとおりです。
Default Greeting
Required Drawing
私の場合、何がうまくいかないのか誰か知っていますか?
更新 アドバイスありがとうございます。私はデバッグしていましたが、ここで何か問題が発生したようです:
public String getMessage(String code, Object[] args, String defaultMessage, Locale locale) {
if (this.parentMessageSource != null) {
return this.parentMessageSource.getMessage(code, args, defaultMessage, locale);
}
else {
return renderDefaultMessage(defaultMessage, args, locale);
}
}
this.parentMessageSource は null であるため、デフォルト メッセージをレンダリングすることにしました。しかし、私はまだparentMesssageSourceとは何か、そしてそれがどのようにnullになる(ではない)のかをよく理解していませんか?