如何在 Quarkus 中创建自定义范围?
How to create a custom scope in Quarkus?
我尝试按照此说明进行操作 https://rpestano.wordpress.com/2013/06/30/cdi-custom-scope/
,但它不起作用,因为我的自定义 Context
的方法没有被触发。
您可以在 Quarkus 中声明自定义范围。但是,Quarkus 不使用完整的 CDI 实现,而是有一个较轻的实现,不支持您从 CDI 知道的一切你习惯的方式。原因有很多,但主要是为了使其构建时间友好。
CDI 扩展是本质上基于运行时的东西之一,因此不适合 Quarkus 的东西。相反,您必须使用 Quarkus 扩展来声明您的 scope/context。让我给你一些材料...
这里是 link 到 Quarkus CDI 的一般指南,它列出了它的局限性以及它如何弥补它。
This bit in particular 显示如何在扩展中注册自定义范围。方法很简单:
@BuildStep
ContextRegistrarBuildItem customContext() {
return new ContextRegistrarBuildItem(new ContextRegistrar() {
public void register(RegistrationContext registrationContext) {
registrationContext.configure(CustomScoped.class).normal().contextClass(MyCustomContext.class).done();
}
});
}
以及 Narayana 用来激发灵感的 here is a link to how Narayana Quarkus extension uses this exact same API to register @Transactional
. The underlying context class is very similar to what you would use in CDI (or in Weld), take a look at this class。
我尝试按照此说明进行操作 https://rpestano.wordpress.com/2013/06/30/cdi-custom-scope/
,但它不起作用,因为我的自定义 Context
的方法没有被触发。
您可以在 Quarkus 中声明自定义范围。但是,Quarkus 不使用完整的 CDI 实现,而是有一个较轻的实现,不支持您从 CDI 知道的一切你习惯的方式。原因有很多,但主要是为了使其构建时间友好。
CDI 扩展是本质上基于运行时的东西之一,因此不适合 Quarkus 的东西。相反,您必须使用 Quarkus 扩展来声明您的 scope/context。让我给你一些材料...
这里是 link 到 Quarkus CDI 的一般指南,它列出了它的局限性以及它如何弥补它。
This bit in particular 显示如何在扩展中注册自定义范围。方法很简单:
@BuildStep
ContextRegistrarBuildItem customContext() {
return new ContextRegistrarBuildItem(new ContextRegistrar() {
public void register(RegistrationContext registrationContext) {
registrationContext.configure(CustomScoped.class).normal().contextClass(MyCustomContext.class).done();
}
});
}
以及 Narayana 用来激发灵感的 here is a link to how Narayana Quarkus extension uses this exact same API to register @Transactional
. The underlying context class is very similar to what you would use in CDI (or in Weld), take a look at this class。