在OpenLiberty中将构造函数注入与CDI结合使用

时间:2019-02-14 07:35:21

标签: jax-rs cdi open-liberty

我正在构建一个应在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类用@Stateless注释,在beans.xml中,我设置了bean-discovery-mode="all"

知道我在做什么错吗?这实际上应该起作用吗? Weld documentation建议这样做,但我不确定它是否也符合CDI规范...

1 个答案:

答案 0 :(得分:1)

这是一个很长的故事...有些人正在努力解决这个问题: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