JavaのWebアプリケーション開発フレームワークによる、Webサイト開発の顛末記です。

EclipseのMavenを使った、Spring-MVC、Thymeleaf、MyBatis 等のプログラミングテクニックを、
備忘録的に記録しています。実際に動くソースコードを多用して説明していますので、
これからEclipseや、Spring-MVCを始めたいと思っている人にとって、少しでも参考になれば幸いです。
■Spring Boot の小径 第4歩 Spring Boot 匍匐前進
4-3)Singletonの悪魔 再来
覚えていますか?
■SpringMVC の小径 7-3)Singletonの悪魔では、
恐ろしい悪魔が出現しました。
Spring Boot ではどうだろうと、4-2)入力チェック の検証のついでに
ちょっと実験してみました。
別のブラウザを開いて、「http://localhost:8080/promenade」と入力してみます。
Devils of Hell
初期画面が開いた直後ですが、別のブラウザで入力された内容が表示されました。
やはり、Spring Boot にも、Singltonの悪魔が潜んでいるようです。(当たり前か)
ここでも、しっかりと悪魔払いのお札「@Scope("prototype")」を貼っておくことにしましょう。
詳しくは、■SpringMVC の小径 7-3)Singletonの悪魔を見てください。

 

※)こぼれ話 2017/Apr/05 追記
■SpringMVC の小径 7-3)Singletonの悪魔 (こぼれ話)
で、Singletonの一括排除魔法をご紹介したついでに、
Spring Boot におけるSingletonの一括排除呪文もご紹介しておきます。

Gradleプロジェクト / Mavenプロジェクト どちらも一緒ですが
Spring Boot プロジェクトが作成された時に自動生成されるメインクラス、
ProjectNameApplication.javaのクラスに、アノテーションを一行追加します。
このプロジェクトの例ですと、src/main/java/jp/dip/arimodoki/BootLaboApplication.java(抜粋)
@SpringBootApplication
@ComponentScan(basePackages = "jp.dip.arimodoki", scopeResolver = Jsr330ScopeMetadataResolver.class)
public class BootLaboApplication {
     :
     :
クラスのアノテーションで、上の赤字の行を一行追加します。

これだけで、ここでコンポーネントスキャン宣言されたパッケージ配下のクラスのScopeは、prototypeになり
一々、@Scope("prototype")アノテーションを宣言しなくても、Singltonの呪縛から解放されます。
対象パッケージが複数ある場合は、basePackagesにカンマ(,)区切りでパッケージ名を記述します。
GradleプロジェクトでJsr330ScopeMetadataResolverを使用するためには、build.gradleスクリプトlに
compile('javax.inject:javax.inject:1') を追加してください。
Mavenプロジェクトの場合は、Mavenが勝手に依存関係を解決してくれるみたいなので、
pom.xmlに明示的に定義する必要はないようです。
もし、自動的に拾ってきてくれない場合は、
<dependency>
 <groupId>javax.inject</groupId>
 <artifactId>javax.inject</artifactId>
 <version>1</version>
</dependency>
を追加で定義してください。