Я создаю небольшое приложение Java EE 8, которое должно работать на OpenLiberty.Он имеет 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"
.
Есть идеи, что я делаю не так?Это на самом деле должно работать? Документация по сварке предполагает, что так и должно быть, но я не уверен, что это также входит в спецификацию CDI ...