👏

SpringBoot使ってる場合はHttpSessionを@Autowiredできる

2021/08/11に公開

最初に

思いっきり勘違いして大騒ぎしたのでメモ

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