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

发布于 2024-09-25 07:40:03 字数 127 浏览 3 评论 0原文

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

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

I would like to have my own contexts for some CDI-based projects. I need (want) custom scopes so that I can isolate the how long a component lives and where.

To implement your own context, you need to implement the Context interface which is pretty self-explanatory, but how or where to you really define when it is created?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不念旧人 2024-10-02 07:40:03

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

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

沃尔特

I haven't tested this yet, but I believe this will work. For each custom scope/context you want in your application, you simply need to add that context via an extension when the container is initialized:

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

  beanManager ...
}

Now, the trick is, you need to hold a reference to that context so then when you want to start or stop it, you can. That would be something like:

@Inject
protected HttpRequestLifecycle httpRequestLifecycle;

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

public void startContext()
{
  httpRequestContextLifecycle.getHttpRequestContext().activate();
}

That should do it, there isn't a wealth of documentation out there, so I hope this helps.

Anyone interested, check out the source here:
http://github.com/walterjwhite/server.web.application

Walter

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文