アプリケーションコンテキスト初期化イベントにフックを追加する方法は?
2023-10-13 15:23:13
質問
通常のサーブレットでは コンテキストリスナー を宣言することができると思いますが、Spring MVCの場合、Springはこれをもっと簡単にできるのでしょうか?
さらに、私がコンテキストリスナーを定義し、その後、私の
servlet.xml
または
applicationContext.xml
にアクセスしたいのですが、どうすればよいでしょうか?
どのように解決するのですか?
Springには標準的なイベントがいくつかあり、それを処理することができます。
これを行うには、以下のメソッドを実装したビーンを作成し、登録する必要があります。
ApplicationListener
インターフェイスを実装したビーンを作成し、登録する必要があります。
package test.pack.age;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
public class ApplicationListenerBean implements ApplicationListener {
@Override
public void onApplicationEvent(ApplicationEvent event) {
if (event instanceof ContextRefreshedEvent) {
ApplicationContext applicationContext = ((ContextRefreshedEvent) event).getApplicationContext();
// now you can do applicationContext.getBean(...)
// ...
}
}
}
次に、このビーンを
servlet.xml
または
applicationContext.xml
ファイルを作成します。
<bean id="eventListenerBean" class="test.pack.age.ApplicationListenerBean" />
で、アプリケーションコンテキストが初期化されるとSpringがそれを通知します。
Spring 3では(このバージョンを使っている場合)
ApplicationListener
クラスは一般的な
で、興味のあるイベントの種類を宣言すると、それに応じてイベントがフィルタリングされます。このようにビーンコードを少し単純化することができます。
public class ApplicationListenerBean implements ApplicationListener<ContextRefreshedEvent> {
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
ApplicationContext applicationContext = event.getApplicationContext();
// now you can do applicationContext.getBean(...)
// ...
}
}
関連
-
[解決済み] モデルデータや振る舞いをどこに置くか?[tl; dr; サービスを利用する]
-
[解決済み] Spring Boot - 実行中のポートを取得する方法
-
[解決済み] SpringでLocalDateTime RequestParamを使用するには?StringからLocalDateTimeへの変換に失敗しました」と表示される。
-
[解決済み] なぜ春になると静電場が自動化されないのか?
-
[解決済み] Spring Securityをセッションなしで使用するにはどうすればよいですか?
-
[解決済み] Springは@Autowiredアノテーションを付けずにコンストラクタに依存性を注入する
-
[解決済み] Spring AOP: JoinPointとPointCutの違いは何ですか?
-
[解決済み] Transactionalはどこに置くべきか Service Layer or DAO
-
[解決済み] Spring MVCのModelAndViewにおけるModelとは?
-
[解決済み] Springのアノテーション@Controllerは@Serviceと同じですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] java:comp/env/は何をするところですか?
-
[解決済み] Spring Boot JPA - 自動再接続の設定
-
[解決済み] Spring BootとMongoDBへの接続設定方法
-
[解決済み] Spring Bootアプリケーションの環境指定application.propertiesファイル [終了しました]。
-
[解決済み] Intellij IDEAがSpring Bootのプロパティを解決できないと訴えるが、問題なく動作している
-
[解決済み] Spring Cloud Eureka Server の自己保存と更新閾値を理解する
-
[解決済み] RestController と @RepositoryRestResource の使い分けについて
-
[解決済み] Spring - ビーン初期化のための静的最終フィールド(定数)の使用
-
スプリングプロファイル変数の設定
-
アノテーションで指定されたビーン名が既存の非互換なビーンdefと衝突している。