如何将 CDI 依赖项注入 JAX-RS ClientRequestFilter 提供程序

How to inject CDI dependency into JAX-RS ClientRequestFilter provider

我有一个实现 ClientRequestFilter 的 @Provider。根本不会发现提供者本身。当我手动注册它时,它就会被发现。

ClientBuilder.newBuilder().register(Somefilter.class);

然而,通过这种方式,CDI 不会将依赖项注入 Somefilter。

我的 Somefilter class 的代码如下所示。

@Provider
public class Somefilter implements ClientRequestFilter {

@Inject
private AccountService accountService;


@Override
public void filter(ClientRequestContext requestContext) throws IOException {
    System.out.println(accountService);

}

}

该应用程序还有一个服务器部分,使用 @Application 注释配置,使用一些 classes 实现 ContainerRequestFilter。这些都是Resteasy发现的,连CDI注入都起作用

所以问题是,我怎样才能让客户端-api相关的供应商注入CDI依赖。

@Provider 实现会在服务器端自动发现,但不会在客户端发现。

试试这个:

@Inject
private Somefilter someFilter;

ClientBuilder.newBuilder().register(someFilter);

确保将 bean 定义注释添加到 Somefilter(例如 @Dependent)。

确保导入正确的包 javax.enterprise.context 以声明服务的 @RequestScoped 范围 class:

import javax.enterprise.context.RequestScoped;

@Named
@RequestScoped
public class AccountService {

}

我遇到了这个问题,发现我错误地使用了 Faces (JSF) 包,而不是 javax.faces.bean.RequestScoped