👏
SpringBoot使ってる場合はHttpSessionを@Autowiredできる
最初に
思いっきり勘違いして大騒ぎしたのでメモ
Springboot 1.3.5
問題(ではなかった)コード
結論を先に言うと、このコードは想定通り動きます。
@Controller
public class MenuController {
@Autowired
HttpSession session;
@RequestMapping(value = "/", method = RequestMethod.GET)
String method() {
return "somehtml";
}
}
何が問題だと勘違いしたか
くどいですが、以下のような問題は起きません。
- Controller(prototype スコープ)に HttpSession(session スコープ)のインスタンスを DI しようとしている
- Controller のフィールドに session を持っているので同時にアクセスが来たときに session を取り違えるのではないか?
簡単に検証しただけなのであまり詳しくは調べていませんが、DI されるインスタンスは HttpSession そのものではなく
適切に request に紐付いた session を触ってくれるようなプロクシみたいなもののようです。
そのため、上記 1,2 のどちらも発生しないようになっています。(Thread.sleep 入れて検証したので間違いないです)
所感
Spring 様はほんと偉大。
Discussion