3

springsourceドキュメントによると、singletonスコープ Bean は
コンテナーごとに 1 回だけインスタンス化されます。たとえば、ユーザーUserDetailsに関する情報を含むシングルトン スコープの Bean があり
ます。
私の main() メソッドでは:

ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"Spring-Customer.xml"});  
UserDetails ud1 = (UserDetails)context.getBean("userDetails");  
custA.setAddress("Address set by ud1");  
System.out.println("Address : " + ud1.getAddress());  

UserDetails ud2 = (UserDetails)context.getBean("userDetails");  
System.out.println("Address : " + ud2.getAddress());

出力は次のようになります。

Address set by ud1  
Address set by ud1

userDetails は singleton Bean であるため、2 回目の取得ud2は ud1 と同じ結果になります。

ここに私の問題があります:
私のWebアプリケーションには、次UserDetailsのBeanがありますdispatcher-servlet.xml.

<bean id="userDetails" class="com.mukund.DTO.UserDetails" />  

最初の質問:シングルトン スコープは Web アプリケーションのデフォルトでもありますか?
IF YES:
この Bean は、AccountServiceおよびCustomerServiceクラスに自動配線されます。
クライアントが、CustomerService クラスでユーザーの名を「UserA」clientAに設定し、しばらくしてから AccountService クラスから名を取得したと言う場合、

2 番目の質問:最初の名前として「UserA」を持つ UserDetailsの同じインスタンスを取得しますか?
3 番目の質問:その間、別のクライアントclientBが AccountService クラスで最初の名前を取得しようとすると、"UserA" を取得しますか?
4 番目の質問:同じ UserDetails インスタンスが clientA、clientB などで共有されますか? はいの場合: プロトタイプ、リクエスト、またはセッションを選択するスコープ。

私の言いたいことを理解していただければ幸いです。Web アプリケーションに関して、Spring Bean のスコープについて説明してください。

ありがとう

4

2 に答える 2

1

デフォルトでは、Spring Bean のスコープはシングルトンであり、コンテナーごとに 1 つのインスタンスを意味します。ただし、すべてのリクエストで同じインスタンスが使用されるわけではありません。

それはこのように動作します。

クライアント A が Bean A を要求すると、コンテナはその Bean A のインスタンスを探します。インスタンスが利用できない場合は、インスタンスを作成してクライアント A に渡します。

ただし、Bean A が別のクライアント B によって使用されている場合、クライアント A は、クライアント B が Bean A を解放するまで待機する必要があります。

于 2013-04-01T14:30:53.993 に答える