■Spring Boot の小径 第4歩 Spring Boot 匍匐前進 |
4-3)Singletonの悪魔 再来 |
覚えていますか? ■SpringMVC の小径 7-3)Singletonの悪魔では、 恐ろしい悪魔が出現しました。 Spring Boot ではどうだろうと、4-2)入力チェック の検証のついでに ちょっと実験してみました。 別のブラウザを開いて、「http://localhost:8080/promenade」と入力してみます。 |
![]() |
初期画面が開いた直後ですが、別のブラウザで入力された内容が表示されました。 やはり、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> を追加で定義してください。 |
4-2)入力チェック ![]() |
4-3)Singletonの悪魔 |
![]() |