質問: SpringBootのBeanのスコープで分からない事があります。 ご存知の方がおられましたら、ご教授いただけますでしょうか。 【質問】 Beanのスコープにsingletonとapplicationがあります。 このスコープの違いが分からないのですが、何が違うのでしょうか。 singleton、applicationは以下の様に記述されていましたが、 同じような事(Webアプリケーション毎に共有する事が可能?)を言っているように 見受けられるのですが、違うのでしょうか、 【singleton】 DIコンテナの起動時に、Beanのインスタンスを生成し、同一のインスタンスを共有して利用する。 【application】 サーブレットのコンテキスト単位でBeanのインスタンスを生成する。 よろしくお願いいたします。
回答: こんにちは、はじめまして。 基本的にはSpringアプリケーション内で参照できるコンポーネントであることに違いはありません。 Singletonスコープ、の場合は同一の **ApplicationCotext** 内から参照できます。 Applicationをスコープにした場合は、**ServeltContext** の単位で参照できるコンポーネントになります。 ServletContextは複数のApplicationContextを保持している場合があります。 簡単にいえば同じシステムの中で複数のアプリケーションが動いている場合横断して参照できるスコープです。 基本的にはデフォルトで、Singletonになることから分かるように実装上の理由がなければ、Singletonを利用すればよいと思います。 ApplicationContextはSpring固有のもので、ServletContextはJavaサーブレットの一般的な概念にあたるので、混乱しないように注意しましょう。 参照URL : 追記 Spring Boot(MVC)は下記のようにDipsatcherServletを経由して動作します。なのでこの一個のDispatcherServeltの範囲が、applicationContextで、Singletonスコープが参照できる範囲です。applicationレベルのスコープでは複数のDispatcherServletを参照できます。 粒度のレベルがJavaServletの概念と違うので、片方しか使わないなら混同するのでJavaServletの仕組みは忘れてしまう/参考にしないのもいいんじゃないかと思います。