Spring Boot Beanのスコープであるsingletonとapplicationの違いについて


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 :  
<https://stackoverflow.com/questions/49819633/spring-singleton-scope-vs-
application-scope/49820934>  
<https://www.baeldung.com/spring-bean-scopes>

## 追記

Spring
Boot(MVC)は下記のようにDipsatcherServletを経由して動作します。なのでこの一個のDispatcherServeltの範囲が、applicationContextで、Singletonスコープが参照できる範囲です。applicationレベルのスコープでは複数のDispatcherServletを参照できます。

粒度のレベルがJavaServletの概念と違うので、片方しか使わないなら混同するのでJavaServletの仕組みは忘れてしまう/参考にしないのもいいんじゃないかと思います。

<https://yiingw.files.wordpress.com/2017/07/springmvc1.jpg?w=640>




こんにちは、はじめまして。

基本的にはSpringアプリケーション内で参照できるコンポーネントであることに違いはありません。

Singletonスコープ、の場合は同一の **ApplicationCotext** 内から参照できます。

Applicationをスコープにした場合は、 **ServeltContext** の単位で参照できるコンポーネントになります。  
ServletContextは複数のApplicationContextを保持している場合があります。  
簡単にいえば同じシステムの中で複数のアプリケーションが動いている場合横断して参照できるスコープです。

基本的にはデフォルトで、Singletonになることから分かるように実装上の理由がなければ、Singletonを利用すればよいと思います。

ApplicationContextはSpring固有のもので、ServletContextはJavaサーブレットの一般的な概念にあたるので、混乱しないように注意しましょう。

参照URL :  
<https://stackoverflow.com/questions/49819633/spring-singleton-scope-vs-
application-scope/49820934>  
<https://www.baeldung.com/spring-bean-scopes>

## 追記

Spring
Boot(MVC)は下記のようにDipsatcherServletを経由して動作します。なのでこの一個のDispatcherServeltの範囲が、applicationContextで、Singletonスコープが参照できる範囲です。applicationレベルのスコープでは複数のDispatcherServletを参照できます。

粒度のレベルがJavaServletの概念と違うので、片方しか使わないなら混同するのでJavaServletの仕組みは忘れてしまう/参考にしないのもいいんじゃないかと思います。

<https://yiingw.files.wordpress.com/2017/07/springmvc1.jpg?w=640>

