我无法在 Resteasy 中注入(inject) cdi bean。调试时似乎总是显示空指针异常。即下面代码中的“jaxRsImpl”始终为空。我正在尝试在 jboss eap 6.2 上运行
@Path("/jaxrs-service")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class JAXRSService {
@Inject
private JAXRSImpl jaxRsImpl;
@POST
@Path("/authenticate")
@Consumes(MediaType.APPLICATION_JSON)
public Response authenticate(Credentials user) {
return jaxRsImpl.authenticate(user);
}
}
我打算注入(inject)的类是
@RequestScoped
public class JAXRSImpl {
public Response authenticate(Credentials user) {
// Some logic
}
}
因为我的应用程序是 web,所以我在 WEB-INF 文件夹中添加了 beans.xml
我的初始化程序看起来像
@ApplicationPath("/rest")
public class JAXRSInitializer extends Application {
private Set<Object> singletons = new HashSet<Object>();
private Set<Class<?>> classes = new HashSet<Class<?>>();
public JAXRSInitializer() {
singletons.add(new JAXRSService());
classes.add(JAXRSImpl.class);
}
@Override
public Set<Class<?>> getClasses() {
return classes;
}
@Override
public Set<Object> getSingletons() {
return singletons;
}
}
最佳答案
您需要确保您的应用程序是 CDI 感知的。以下是一些关键要求:
- 在 JAX-RS 中,不要列出您的类/单例。让容器发现它们。基本上创建一个空的
Application
实现。 - 确保你有一个有效的
beans.xml
- 确保您的其余端点具有有效范围 - 例如
@RequestScoped
第一个项目符号是关键,因为您是手动实例化您的服务,而不是让容器找到它们。
关于java - 无法轻松注入(inject) CDI Bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27338403/