「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アプリケーション]を押下します。
コンソール画面に「出身:東京都,氏名:山田 太郎」が表示されます。