在OpenLiberty中使用CDI构造函数注入

问题描述 投票:0回答:1

我正在构建一个应该在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。但是,如果使用@Inject注释字段并省略构造函数,则正确注入该字段。

MyService类用@Stateless注释,在beans.xml我设置了bean-discovery-mode="all"

知道我做错了什么吗?这实际上应该有效吗? Weld documentation表示它应该,但我不确定它是否也在CDI规范中......

jax-rs cdi open-liberty
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.