Spring: リクエストスコープの Bean に HttpServletRequest を注入するにはどうすればいいですか? 質問する

Spring: リクエストスコープの Bean に HttpServletRequest を注入するにはどうすればいいですか? 質問する

私は設定しようとしていますリクエストスコープBean春に。

リクエストごとに Bean が 1 回作成されるように設定できました。次に、HttpServletRequest オブジェクトにアクセスする必要があります。

Bean はリクエストごとに 1 回作成されるため、コンテナーはリクエスト オブジェクトを Bean に簡単に挿入できると思います。どうすればそれができるでしょうか?

ベストアンサー1

Springは現在のHttpServletRequestオブジェクト(および現在のHttpSessionオブジェクト)をラッパー型のオブジェクト。このラッパー オブジェクトは ThreadLocal にバインドされており、メソッドServletRequestAttributesを呼び出すことによって取得されます。staticRequestContextHolder.currentRequestAttributes()

ServletRequestAttributesgetRequest()現在のリクエストを取得するメソッド、getSession()現在のセッションを取得するメソッド、および両方のスコープに格納されている属性を取得するメソッドを提供します。次のコードは、少し見苦しいですが、アプリケーションのどこからでも現在のリクエスト オブジェクトを取得できます。

HttpServletRequest curRequest = 
((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes())
.getRequest();

RequestContextHolder.currentRequestAttributes()メソッドはインターフェースを返すため、ServletRequestAttributesインターフェースを実装する型キャストを行う必要があることに注意してください。


Spring Javadoc: リクエストコンテキストホルダー|サーブレットリクエスト属性

おすすめ記事