2

春のリファレンスマニュアルは言う:

Springシングルトンの範囲は、「コンテナーごとおよびBeanごと」として最もよく説明されます。

このコードスニペットを検討してください。

ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml")
MyBean myobj=(MyBean)context.getBean("myBean"); //myBean is of singleton scope.
MyBean myobj1=(MyBean)context.getBean("myBean");

per containerつまり、context.getBean("myBean");2回実行すると、同じBeanが返されます。つまりmyobj==myobj1ですtrue

しかし、上記のステートメントからのper beanインはどういう意味ですか?per container and per bean

4

3 に答える 3

4

簡単な方法で

ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml")
MyBean myobj=(MyBean)context.getBean("myBean"); //myBean is of singleton scope.

ApplicationContext context1= new ClassPathXmlApplicationContext("Beans.xml")
MyBean myobj1=(MyBean)context1.getBean("myBean");

myobj==myobj1 would not be same
于 2012-07-24T13:06:31.433 に答える
3

Spring Beanコンテナは、シングルトンスコープのBean用のシングルBeanを作成します。別のSpringコンテナがある場合は、別のBeanが作成されます。

したがって、コンテナごとにBeanの単一インスタンスが存在します(シングルトンスコープのBeanの場合)

于 2012-07-24T12:40:15.187 に答える
0

これに関連して別の質問をしました。スプリングシングルトンスコープ—コンテナごと、Beanごと

per beanそれから私はフレーズの一部について次のように結論付けましたper container per bean

検討:

ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml")
MyBean myobj=(MyBean)context.getBean("myBean"); 
MyBean myobj1=(MyBean)context.getBean("myBean"); 
MyBean myobj2=(MyBean)context.getBean("mySecondBean");

Beans.xml:

<bean id="myBean" class="MyBean"/>
<bean id="mySecondBean" class="MyBean"/>

今春のシングルトンはですper container per bean

per containerつまり、同じコンテナ内で同じBean IDを取得した場合、それらは同じインスタンスを表し ます。したがって、trueです。getBean()myobj==myobj1

また、2つの異なるコンテナで同じIDのBeanを取得すると、それらは2つの異なるインスタンスを表します。これは、上記のNirmalthInkbeYondによる回答で表されます。

ただし、シングルトンの場合は、その中に(Beanタグごとに)per container含める必要があります。per bean

つまり、同じクラスの構成ファイルで2つのBeanを定義すると、それらは同じコンテナー内でも異なるインスタンスを表します。

myobj==myobj2それが誤りである理由です。

于 2012-10-17T05:39:51.317 に答える