我希望为一些基于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
沃尔特