27

私はRESTful Webサービスを開発しています.Jerseyのドキュメントを読んでいるときに、注釈に出くわしました.@Singleton

私の Web サービスでは、主にパラメーターとして提供された一意のキーに基づいてデータを返しています。Student_Id が渡されると、Student のすべての情報が返されます。

だから私の質問は、いつ@Singletonそのような種類の Web サービスに適しているのでしょうか?

ドキュメントによると@RequestScoped

リクエスト処理でリソースが複数回使用される場合、常に同じインスタンスが使用されます。

その場合、わざわざ使用しないでください@Singleton

また、リクエストごとに新しいインスタンスを作成する必要があるユースケースは何ですか?

この投稿を見ましたが、私の質問には答えられませんでした。

4

4 に答える 4

27

デフォルトでは、Jersey はリクエストごとにリソース クラスの新しいインスタンスを作成します。したがって、Jersey リソース クラスにアノテーションを付けないと、暗黙的に@RequestScopedスコープが使用されます。ジャージーのドキュメントに記載されています:

デフォルトのライフサイクル (注釈が存在しない場合に適用されます)。このスコープでは、新しいリクエストごとにリソース インスタンスが作成され、このリクエストの処理に使用されます。リクエスト処理でリソースが複数回使用される場合、常に同じインスタンスが使用されます。これは、リソースがサブリソースである場合に、マッチング中に複数回返される場合に発生する可能性があります。この状況では、インスタンスでのみリクエストを処理します。

ほとんどの場合、このデフォルト設定を使用するため、@Singletonスコープは使用しません。@Singletonアノテーションを使用して、シングルトンの Jersey リソース クラスを作成することもできます。MyApplication次に、クラスにシングルトン クラスを登録する必要があります。

@Path("/resource")
@Singleton
public class JerseySingletonClass {
    //methods ...
}

public class MyApplication extends ResourceConfig {

    /*Register JAX-RS application components.*/
    public MyApplication () {
        register(JerseySingletonClass.class);
    }
}
于 2013-12-10T21:43:23.277 に答える