29257


CDIには`@RequestScoped`アノテーションがありますが、これが最も短いスコープでしょうか？  
リクエストどころか、１回のメソッド呼び出しでスコープが終わっても構わない（当然、状態も持たない）処理があるのですが、その場合も`@RequestScoped`を使うものなのでしょうか？


CC BY-SA 3.0
2016-09-29T14:45:36.763
29250
2016-09-30T02:29:01.993
8078
question
java java-ee
最も短いスコープで使用すべきアノテーションは？


CDI実装である[Weldのマニュアル](http://docs.jboss.org/weld/reference/2.4.0.Final/en-
US/html/scopescontexts.html#_built_in_scopes)からの引用になりますが、現行存在する **組み込み**
のスコープは以下の4種類で、このうち最もスコープが短いものはお考えの通り`@RequestScoped`です。

  * `@RequestScoped`
  * `@SessionScoped`
  * `@ApplicationScoped`
  * `@ConversationScoped`

一般的には、質問文に書かれている状況では`@RequestScoped`を使用します。  
(ただ、ここは主観的な考えになるのですが、あまりそのようなことが気になる粒度ではInjectionを行わないのでは、とも考えます。)

* * *

CDIの祖先に当たる JBoss Seam という実装では
[`METHOD`](https://docs.jboss.org/seam/2.3.1.Final/api/org/jboss/seam/ScopeType.html#METHOD)というスコープタイプが存在していました。  
おそらくこれが所望のものだと考えますが、上記の通り現行CDIの組み込みスコープとしては定義されていません。

CDI2.0仕様策定時に`@MethodScoped`というものが検討されていたようです[[参考](http://www.slideshare.net/antoinesd/cdi-20-is-
coming/22)]。  
[CDI2.0仕様書](http://docs.jboss.org/cdi/spec/2.0.EDR2/cdi-
spec.html#builtin_scopes)に記載は無いので採用は見送られたのだと思われますが、もしかすると将来導入されるかもしれません。

* * *

組み込みスコープにこだわらなければ、自前でカスタムスコープを実装することも可能かと思います。  
(が、すみません、ここに何かを書けるほど知識を持ち合わせていません。)


CC BY-SA 3.0
2016-09-30T02:29:01.993
29257
2016-09-30T02:29:01.993
2808
29250
answer