@Componentでクラスに注釈を付けるとき、これはそれがSpring Beanおよびシングルトンであることを意味しますか?


111

Springはかなり新しいので、クラスに注釈を付けることについて質問があります。クラスに注釈を付ける場合、@ComponentこれはこのクラスがSpring Beanであり、デフォルトでシングルトンになることを意味しますか?

回答:


129

はい、そうです@Component。SpringBeanとシングルトンです。

クラスがサービス層に属している場合は、@Service代わりに注釈を付けることができます

ただし、これらの注釈を検出するには、この行をapplicationContext.xml次の場所に配置する必要があることを覚えておいてください。

<context:component-scan base-package="com.yourcompany" />

シングルトンについて-デフォルトでは、Spring Beanはすべてシングルトンスコープにあります。覚えておく必要があるのは、フィールド変数に状態を格納しないことです(依存関係のみを保持する必要があります)。したがって、アプリケーションはスレッドセーフであり、毎回Beanの新しいインスタンスを必要としません。つまり、Beanはステートレスです。


1
@Componentや@Serviceアノテーションなどを使用すると、シングルトンを作成することになりますが、同時実行の問題は発生しませんか?私の初心者の考えでは、ApplicationContext全体で使用されるBeanになるため、同時ユーザーは単一のBeanへの参照を取得します。それとも何か不足していますか?
Marco、

3
@Marco状態(Spring Beanとは異なるインスタンス変数)がない場合、同時実行の問題は発生しません。
Bozho、

毎回Beanの新しいインスタンスが「必要」であるか、または毎回Beanの新しいインスタンスが「必要」ではないですか?
Harshana

@Bozhoどういう意味ですか:「毎回Beanの新しいインスタンスを必要としない」?Springが新しいインスタンスを作成する必要がない、または開発者が新しいインスタンスを作成する必要がないという意味ですか?
user1766169 2017年

24

デフォルト-はい。

ただし、@Scopeアノテーションを使用してこの動作をオーバーライドできます。例えば:@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.