我在 SO 和官方文档上搜索了一段时间,但找不到直接将 CDI 注入(inject) JAX-RS 客户端的方法。
我使用 builder 方法检索客户端,我想注册一个 WriterInterceptor
(或任何过滤器之类的组件)使用注入(inject)来检索另一个 bean。
我想使用 CDI 注入(inject)并避免向 HK2 注册每个 bean。
ClientBuilder.newBuilder()
.register(MyWriter.class)
.build();
和带有注入(inject)类的 MyWriter。
@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 的嵌入式码头运行。
最佳答案
它可以使用 wield 注入(inject) 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();
}
}
内部主要初始化 Weld
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();
}
}
看看下面的文档
https://docs.jboss.org/weld/reference/latest/en-US/html/environments.html#_java_se
也在下面教程
https://randling.wordpress.com/2011/08/15/cdi-in-java-se/
关于jersey - 如何在 JAX-RS 客户端中使用 CDI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41011692/