如何将 CDI 依赖项注入 JAX-RS ClientRequestFilter 提供程序
How to inject CDI dependency into JAX-RS ClientRequestFilter provider
我有一个实现 ClientRequestFilter 的 @Provider。根本不会发现提供者本身。当我手动注册它时,它就会被发现。
ClientBuilder.newBuilder().register(Somefilter.class);
然而,通过这种方式,CDI 不会将依赖项注入 Somefilter。
- AS:野蝇 10
- JAX-RS:Resteasy(内置 WildFly)
我的 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
。
我有一个实现 ClientRequestFilter 的 @Provider。根本不会发现提供者本身。当我手动注册它时,它就会被发现。
ClientBuilder.newBuilder().register(Somefilter.class);
然而,通过这种方式,CDI 不会将依赖项注入 Somefilter。
- AS:野蝇 10
- JAX-RS:Resteasy(内置 WildFly)
我的 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
。