7

对于一些基于 CDI 的项目,我想拥有自己的上下文。我需要(想要)自定义范围,以便我可以隔离组件的寿命和位置。

要实现您自己的上下文,您需要实现非常不言自明的 Context 接口,但是您如何或在何处真正定义它何时创建?

4

2 回答 2

4

我还没有对此进行测试,但我相信这会奏效。对于您想要在应用程序中使用的每个自定义范围/上下文,您只需在初始化容器时通过扩展添加该上下文:

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

沃尔特

于 2010-09-26T03:56:58.817 回答
1

查看这篇 DZone 文章:CDI 1.0 和 Spring 3.1 中的自定义范围 (下半部分)

于 2011-07-16T05:06:12.463 回答