Spring Bean のロードプロセスとは何ですか?
SpringコンテナにおけるBeanのロードプロセスは以下のような段階で行われる。
- Springは、XML、アノテーション、またはJavaConfigなどの設定ファイルを読み取って、ロードする必要があるBeanを決定します。設定ファイルで定義されたパスまたはパッケージ名に従って、Springは対応するBean定義をスキャンして特定します。
- ロード:Bean定義を見つけたら、Springは適切なクラスローダーを使ってそのBeanクラスをロードします。この処理の中で、SpringはBeanのメタデータ(クラスの完全修飾名、実装インターフェイスなど)を使用してBeanDefinitionオブジェクトを作成し、Beanの情報を記録します。
- Bean の定義の読み込み後、Spring は Bean をインスタンス化します。Bean のスコープに基づき、インスタンス化方法はシングル化(Singleton)またはプロトタイプ(Prototype)のいずれかです。シングル化 Bean の場合、インスタンス化は一度だけ発生し、プロトタイプ Bean の場合、取得のたびに新しいインスタンスが作成されます。
- DI(依存性注入):インスタンス化が完了すると、Spring は依存性注入によって Bean のプロパティに設定します。依存性注入はコンストラクタメソッド、セッターメソッド、または直接フィールドの注入によって行われます。
- イニシャライズ: Beanのプロパティ設定が完了すると、Spring は Beanの初期化メソッド (例: @PostConstruct アノテーションでマークされたメソッド) を呼び出して、いくつかの必要な初期化操作を実行します。
- 破棄時:コンテナが停止されるかビーンが破棄されると、Spring はビーンの破棄方法(@PreDestroy アノテーションがマークされているメソッドなど)を呼び出して、クリーンアップを実行します。
Springでは、DI(依存性注入)コンテナがBeanの読み込み時に自動的に依存関係を解決し、正しい初期化順序を確保します。また、AOPやその他の拡張メカニズムがサポートされており、Beanの強化や処理をロード時に実現できます。