在 OpenLiberty 中通过 CDI 使用构造函数注入
Using constructor injection with CDI in OpenLiberty
我正在构建一个应该 运行 在 OpenLiberty 上的小型 Java EE 8 应用程序。
它有一个 JAX-RS ContainerResponseFilter
,看起来像这样:
package my.package;
import javax.inject.Inject;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.ext.Provider;
@Provider
public class MyFilter implements ContainerResponseFilter {
private final MyService myService;
@Inject
public DiagnosticsFilter(final MyService myService) {
this.myService = myService;
}
@Override
public void filter(final ContainerRequestContext request, final ContainerResponseContext response) {
// Never mind this
}
}
如果我这样编写过滤器并启动我的应用程序,构造函数的 myService
参数是 null
。
但是,如果 field 被注释为 @Inject
并且构造函数被省略,则该字段被正确注入。
MyService
class注解为@Stateless
,beans.xml
我设置了bean-discovery-mode="all"
.
知道我做错了什么吗?这真的应该工作吗? Weld documentation 建议它应该,但我不确定它是否也在 CDI 规范中......
说来话长...有些人正在努力解决问题:JAX-RS 注入 != CDI 注入
它应该在 JAX-RS 2.2 中解决,应该使用 CDI 注入代替 JAX-RS 注入,JAX-RS v3.0 将完全删除 JAX-RS 注入
阅读以下主题:
https://www.eclipse.org/community/eclipse_newsletter/2019/february/Jakarta_EE_9.php
https://github.com/eclipse-ee4j/jaxrs-api/issues/569
https://github.com/eclipse-ee4j/jaxrs-api/issues/639
https://groups.google.com/forum/#!topic/microprofile/gvj94XBhtvM
我正在构建一个应该 运行 在 OpenLiberty 上的小型 Java EE 8 应用程序。
它有一个 JAX-RS ContainerResponseFilter
,看起来像这样:
package my.package;
import javax.inject.Inject;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.ext.Provider;
@Provider
public class MyFilter implements ContainerResponseFilter {
private final MyService myService;
@Inject
public DiagnosticsFilter(final MyService myService) {
this.myService = myService;
}
@Override
public void filter(final ContainerRequestContext request, final ContainerResponseContext response) {
// Never mind this
}
}
如果我这样编写过滤器并启动我的应用程序,构造函数的 myService
参数是 null
。
但是,如果 field 被注释为 @Inject
并且构造函数被省略,则该字段被正确注入。
MyService
class注解为@Stateless
,beans.xml
我设置了bean-discovery-mode="all"
.
知道我做错了什么吗?这真的应该工作吗? Weld documentation 建议它应该,但我不确定它是否也在 CDI 规范中......
说来话长...有些人正在努力解决问题:JAX-RS 注入 != CDI 注入
它应该在 JAX-RS 2.2 中解决,应该使用 CDI 注入代替 JAX-RS 注入,JAX-RS v3.0 将完全删除 JAX-RS 注入
阅读以下主题:
https://www.eclipse.org/community/eclipse_newsletter/2019/february/Jakarta_EE_9.php
https://github.com/eclipse-ee4j/jaxrs-api/issues/569
https://github.com/eclipse-ee4j/jaxrs-api/issues/639
https://groups.google.com/forum/#!topic/microprofile/gvj94XBhtvM