質問: diMessageSource; } // プロパティから文字列読み出し public static String getMessage(String id) { return messageSource.getMessage(id, null, locale); } ``` こんな感じのクラスを jp.co.TestProject(プロジェクト名).testこのパッケージ配下に置いていた場合は 初期化処理が呼ばれた後に実施されていたのですが jp.co配下に移動させると なぜかプロパティ文字列読み出しが先に呼ばれてしまいます。 コンストラクタが先に呼ばれるものと思っていたのですが異なるのでしょうか?
回答: パッケージ移動云々に関しては原因がよくわからないため、以下の点のみに注目して回答します。 > > コンストラクタが先に呼ばれるものと思っていたのですが異なるのでしょうか? > > 質問を「init()が呼ばれる前に、getMessage()が呼ばれることはあり得るか?」と解釈しました。 > > @PostConstructが付与されたメソッドはTestクラスがインスタンス化される際に呼ばれます。 > > (=インスタンス化されなければ呼ばれません) > > そして、質問にあるTestクラスのgetMessageメソッドはstaticメソッドです。 > > staticメソッドはクラスをインスタンス化せずとも呼び出せます。 > > > つまり、Testクラスをインスタンス化する処理よりも先に、getMessage()を呼び出す処理があるならば、先にgetMessageが呼ばれることはありえます。