いくつかの CDI ベースのプロジェクト用に独自のコンテキストを持ちたいと考えています。コンポーネントの存続期間と場所を分離できるように、カスタム スコープが必要 (欲しい) です。
独自のコンテキストを実装するには、Context インターフェースを実装する必要があります。
これはまだテストしていませんが、うまくいくと思います。アプリケーションで必要なカスタム スコープ/コンテキストごとに、コンテナの初期化時に拡張機能を介してそのコンテキストを追加するだけです。
public void afterBeanDiscovery(@Observes AfterBeanDiscover afterBeanDiscovery, BeanManager beanManager)
{
CustomContext customContext = new CustomContext();
afterBeanDiscovery.addContext(customContext);
beanManager ...
}
ここでの秘訣は、そのコンテキストへの参照を保持する必要があるため、それを開始または停止したいときに行うことができるということです。それは次のようになります。
@Inject
protected HttpRequestLifecycle httpRequestLifecycle;
public void doSomething()
{
startContext();
doStuff();
stopContext();
}
public void startContext()
{
httpRequestContextLifecycle.getHttpRequestContext().activate();
}
十分なドキュメントが存在しないため、これが役立つことを願っています。
興味のある方は、こちらのソースをチェックしてください: http://github.com/walterjwhite/server.web.application
ウォルター
この DZone 記事を確認してください: CDI 1.0 および Spring 3.1 のカスタム スコープ (下半分)