Bean を初期化する「最良の」方法があるかどうかはわかりません。それぞれに一長一短があると思いますので、状況によってはどちらかが適切かもしれません。これは確かに完全なリストではありませんが、考慮すべき点がいくつかあります。
コンストラクターを使用すると、不変の Bean を持つことができます。不変オブジェクトは、設計に適合できる場合に適しています。スレッド間のコピー、シリアル化されたアクセス、またはその他の特別な処理は必要ありません。セッターがある場合、オブジェクトは不変ではありません。コンストラクターを使用すると、オブジェクトが適切に初期化されます。コンストラクターが終了すると、オブジェクトは有効になります。オブジェクトを初期化するためにセッターを使用する必要がある場合は、無効なオブジェクトが存在する可能性があります。
一方、コンストラクターを使用すると、テレスコーピングの問題が発生することがよくあります。多くの場合、多くの異なるコンストラクターが必要になりますが、そのほとんどは別のコンストラクターのスーパーセットになります。多くの場合、これらは便宜上のものです。例えば:
public class Person {
public Person(String name) { ... }
public Person(String name, String phone) { ... }
public Person(String name, String phone, String email) { ... }
}
私が非常に気に入っている代替案の 1 つは、JavaOne で Josh Bloch によって提示された、いわゆる「強化された」ビルダー パターンです。これについては、彼の著書「Effective Java, Second Edition」で確認できます。パターンの使用方法を見ると、「afterProperties」メソッドの問題も解決します。ビルダー パターンは、オブジェクトが正しく初期化されることを保証します。
パターンについて説明している追加のブログ投稿を次に示します: http://www.screaming-penguin.com/node/7598
これがあなたの春の要件に合っているかどうかはわかりませんが、一般的に、私はビルダーの大ファンです.