Jersey 如何在JAX-RS客户机中使用CDI
我在SO和官方文档上搜索了一段时间,但我找不到一种直接使用CDI注入到JAX-RS客户机的方法 我使用builder方法检索一个客户机,我想注册一个Jersey 如何在JAX-RS客户机中使用CDI,jersey,jax-rs,cdi,embedded-jetty,weld,Jersey,Jax Rs,Cdi,Embedded Jetty,Weld,我在SO和官方文档上搜索了一段时间,但我找不到一种直接使用CDI注入到JAX-RS客户机的方法 我使用builder方法检索一个客户机,我想注册一个WriterInterceptor(或任何类似过滤器的组件),它使用注入来检索另一个bean 我希望使用CDI注入,并避免向HK2注册每个bean ClientBuilder.newBuilder() .register(MyWriter.class) .build(); 还有我的作家和注入类 @Pr
WriterInterceptor
(或任何类似过滤器的组件),它使用注入来检索另一个bean
我希望使用CDI注入,并避免向HK2注册每个bean
ClientBuilder.newBuilder()
.register(MyWriter.class)
.build();
还有我的作家和注入类
@Provider
public class MyWriter implements WriterInterceptor {
private final MyRepo repo;
@Inject
public MyWriter(MyRepo repo) {
this.repo = repo;
}
@Override
public void aroundWriteTo(WriterInterceptorContext context) throws IOException, WebApplicationException {
context.proceed();
}
}
public class MyRepo {
}
我使用Jersey 2和Weld SE在嵌入式jetty中运行。可以使用Welve注入java SE应用程序
@Singleton
public class Application {
private static Logger logger = LoggerFactory.getLogger(Application.class);
@inject
private SomeOtherBean injectedBean;
public void run() {
logger.debug("application initialized");
injectedBean.doSomething();
}
}
内主井
import java.io.IOException;
import org.jboss.weld.environment.se.Weld;
import org.jboss.weld.environment.se.WeldContainer;
public class EntryPoint {
public static void main(String[] args) throws IOException {
Weld weld = new Weld();
WeldContainer container = weld.initialize();
Application application = container.instance().select(Application.class).get();
application.run();
weld.shutdown();
}
}
看看下面的文档
下面还有教程
如果我对所有内容都理解正确,那么这已经被询问过了。简而言之:您必须覆盖H2K绑定器的默认行为,这样它就可以访问Weld Bean管理器。您不必在以后向H2K注册每个Bean 编辑:要包含帖子中的所有内容,您无需阅读评论:
- 这是针对服务器端的,而不是客户端的
- 使用标准工具(和),这似乎是一个太大的开销/不可能做到的事情
- 显然是在Dropwizard项目中进行自定义客户端注入