1

applicationContext.xml で、同じクラスに異なる ID 名を持つ 2 つの Bean を定義しました。それは完全に機能しているので、正確なスプリングシングルトンスコープが何を意味するのか混乱しました。私のコードは以下です。私はスタックオーバーフローで他の同様の質問をいくつかしました。しかし、それらはまったく同じコンテキストと非常に長い説明ではないため、明確ではありません。

それが何であるか知っているなら、私に共有してください


1.コンテナ(コンテキスト)の単一インスタンス、
-私の場合、2つのインスタンスに対して2つのコンテナを作成していますか?

<bean id="a2" class="com.myapp.Address">
    <constructor-arg value="Delhi"></constructor-arg>
    <constructor-arg value="DOWN"></constructor-arg>
    <constructor-arg value="India"></constructor-arg>
</bean>


<bean id="e" class="com.myapp.Employee">
    <constructor-arg value="12" type="int"></constructor-arg>
    <constructor-arg value="Sonoo"></constructor-arg>
    <constructor-arg>
        <ref bean="a1" />
    </constructor-arg>
</bean>

<bean id="e2" class="com.myapp.Employee">
    <constructor-arg value="12" type="int"></constructor-arg>
    <constructor-arg value="Sonoo"></constructor-arg>
    <constructor-arg>
        <ref bean="a2" />
    </constructor-arg>
</bean>
4

4 に答える 4

1

シングルトン スコープ Bean は簡単です。各 Bean は、実際にはコンテナー (アプリケーション コンテキストとも呼ばれます) でインスタンス化された 1 つのオブジェクトです。

あなたの例では、Spring コンテナーは 2 つEmployeeのオブジェクト (別名 Bean)を作成ee1ます。

他のスコープはもう少しトリッキーです。Bean に対してインスタンス化された複数のオブジェクトが存在する場合があります。たとえば、プロトタイプ スコープで Bean を定義した場合、コンテナからその Bean をルックアップするたびに、コンテナは新しいオブジェクト インスタンスをインスタンス化します。他のスコープについても同様です。コンテナーは、特定のタイミングに基づいて新しいインスタンスを作成します (たとえば、リクエスト スコープにより、着信要求ごとに Bean が作成されるなど)。


注意: このシングルトンをシングルトン デザイン パターンと混同しないでください。「オンリーワン」という特徴以外に共通点はありません。シングルトン デザイン パターンには、Spring のシングルトン スコープとは関係のない他の多くの特性 (たとえば、グローバルに利用可能なルックアップ メソッド、プロセス空間全体で 1 つのインスタンスのみ、明示的にインスタンス化することは許可されていないなど) があります。

于 2015-04-17T02:59:59.760 に答える
-2

スプリング シングルトン スコープは、シングルトン ソフトウェア パターン ( http://en.wikipedia.org/wiki/Singleton_pattern )とほとんど同じように機能します。これの背後にある主なアイデアは、 IOC インスタンス (Spring 実行コンテキスト) で宣言された Bean; より簡潔に言うと、Spring インジェクションを使用してコードの任意の Bean で a2、e、または e2 を参照するたびに、同じ参照が行われます。つまり、同じメモリ位置に同じオブジェクトが存在します。

これをご覧になることをお勧めします:

http://www.tutorialspoint.com/spring/spring_bean_scopes.htmおよびhttp://www.mkyong.com/spring/spring-bean-scopes-examples/ のいくつかの実例

最後に、IOC インスタンスはオブジェクト インスタンスとは異なります。コンテナ インスタンスはメイン メソッドのようなもので、すべてがその中で実行されます。Bean を作成し、単一の IOC コンテナ内ですべてを実行します (もちろん、いくつかの分散環境アーキテクチャがあります)。 IOCコンテナのインスタンスを増やすことができましたが、そうではないと思います)

于 2015-04-17T01:58:15.933 に答える