「Spring 5.3」ResourceBundleMessageSourceでメッセージファイルをUTF-8で読み込むサンプル
環境
Spring 5.3.21 Java17 Eclipse 2022-06 M2 (4.24.0 M2)
プロパティファイルからメッセージを読み込む手順
1.pom.xmlに依存関係ライブラリを追加します
<!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.3.21</version>
</dependency>
2.プロパティファイルの作成(user.properties)
user.info=出身:{0},氏名:{1}
user.city=東京都
user.name=山田 太郎
3.アノテーション@Configurationで設定クラスを作成します(AppConfig.java)
package com.arkgame.study;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ResourceBundleMessageSource;
//設定クラス
@Configuration
public class AppConfig {
@Bean
User user() {
//インスタンスを生成して返す
return new User();
}
@Bean
MessageSource msgSource() {
//メッセージファイルを読み込む
ResourceBundleMessageSource msgSrc = new ResourceBundleMessageSource();
//プロパティファイルを指定
msgSrc.setBasename("user");
//文字コード指定
msgSrc.setDefaultEncoding("UTF-8");
return msgSrc;
}
}
4.プロパティファイルから設定する値を取得します(User.java)
package com.arkgame.study;
import java.util.Locale;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.MessageSourceResolvable;
import org.springframework.context.support.DefaultMessageSourceResolvable;
import org.springframework.stereotype.Component;
//BeanとしてDIコンテナに登録
@Component
public class User {
@Autowired
MessageSource msgSource;
//プロパティファイルから設定する値「user.city」を取得
MessageSourceResolvable strCity = new DefaultMessageSourceResolvable("user.city");
//プロパティファイルから設定する値「user.name」を取得
MessageSourceResolvable strName = new DefaultMessageSourceResolvable("user.name");
public void getMsg() {
//プロパティファイルに{0}、{1}も設定する値「user.info」取得
String msg = msgSource.getMessage("user.info", new MessageSourceResolvable[] { strCity, strName }, Locale.JAPANESE);
System.out.println(msg);
}
}
5.起動するクラス(UserController.java)
package com.arkgame.study;
import org.springframework.beans.BeansException;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class UserController {
public static void main(String[] args) {
//DIコンテナを生成
try (AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class)) {
//DIコンテナからbeanインスタンスを取得
User user = context.getBean(User.class);
user.getMsg();
context.close();
} catch (BeansException e) {
e.printStackTrace();
}
}
}
6.動作確認
プロジェクトを右クリックし「実行(R)」ー>[Javaアプリケーション]を押下します。
コンソール画面に「出身:東京都,氏名:山田 太郎」が表示されます。