我在Java中注入有问题,因为我想注入一个名为RemoteStatisticService的接口,但在这种情况下它会一直返回null,因此错误NullPointerException。我尝试使用init()方法和@PostConstruct跟踪this,但仍然给出了同样的错误。
以下是MeasurementAspectService类的代码:
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import *.dto.MeasureDownloadDto;
import *.dto.MeasureUploadDto;
import *.rs.RemoteStatisticService;
public class MeasurementAspectService {
private @Inject RemoteStatisticService remoteStatisticService;
public void storeUploadDto(MeasureUploadDto measureUploadDto) {
remoteStatisticService.postUploadStatistic(measureUploadDto);
}
public void storeDownloadDto(MeasureDownloadDto measureDownloadDto) {
remoteStatisticService.postDownloadStatistic(measureDownloadDto);
}
@PostConstruct
public void init() {
}
}
以下是接口类RemoteStatisticService
的代码import static *.util.RemoteServiceUtil.PRIV;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import *.dto.MeasureDownloadDto;
import *.dto.MeasureUploadDto;
@Path(PRIV + "stats")
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public interface RemoteStatisticService {
@POST
@Path("upload")
void postUploadStatistic(MeasureUploadDto mud);
@POST
@Path("download")
void postDownloadStatistic(MeasureDownloadDto mdd);
}
感谢任何帮助。感谢
答案 0 :(得分:1)
问题在于您已使用aspectj定义了一个方面,但正在尝试获取对CDI bean的引用。这不会起作用。
这一行是罪魁祸首:
private final MeasurementAspectService measurementAspectService = new MeasurementAspectService();
您需要使用CDI来获取参考。如果您正在使用CDI 1.1,则可以使用此代码段。
private final MeasurementAspectService measurementAspectService = CDI.current().select(MeasurementAspectService.class).get();
这是因为AspectJ不适合CDI使用。请注意,您也可以在CDI中使用interceptors。
答案 1 :(得分:0)
CDI 1.1+默认使用隐式bean。您需要将@Dependent
或@ApplicationScoped
之类的bean定义注释添加到您希望被CDI选中的任何类中。