CDI - 编写自定义上下文和范围

7 scope cdi

我想对一些基于CDI的项目有自己的背景.我需要(想要)自定义范围,以便我可以隔离组件的生存时间和位置.

为了实现自己的情况下,你需要实现Context接口,这是相当不言自明,但在创建时如何或在哪里,你真的确定?

小智 4

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

public void afterBeanDiscovery(@Observes AfterBeanDiscover afterBeanDiscovery, BeanManager beanManager)
{
  CustomContext customContext = new CustomContext();
  afterBeanDiscovery.addContext(customContext);

  beanManager ...
}
Run Code Online (Sandbox Code Playgroud)

现在,技巧是,您需要保存对该上下文的引用,以便当您想要启动或停止它时,您可以。那会是这样的:

@Inject
protected HttpRequestLifecycle httpRequestLifecycle;

public void doSomething()
{
  startContext();
  doStuff();
  stopContext();
}

public void startContext()
{
  httpRequestContextLifecycle.getHttpRequestContext().activate();
}
Run Code Online (Sandbox Code Playgroud)

应该可以了,没有大量的文档,所以我希望这会有所帮助。

任何感兴趣的人,请查看此处的来源: http: //github.com/walterjwhite/server.web.application

沃尔特

  • 如果是@Singleton,你会如何区分多个请求?您不应该在上下文侦听器中的某个位置创建并激活上下文吗? (2认同)