我正在为 CDI 和类继承而苦苦挣扎。我有一个 JAX-RS 控制器声明为:
@Path("/share")
public class ControllerShare extends BaseController {
@Inject
private ServiceShare serviceShare;
@PostConstruct
private void verifInit() throws ExceptionTechnique {
log.warn("Checking CDI injection");
if (serviceShare == null) {
log.error("serviceAccount not initialized. Check your EJB configuration");
throw new ExceptionTechnique("serviceShare not initialized. Check your EJB configuration.");
}
}
...
}
此控制器扩展了声明为的基本控制器:
public abstract class BaseController {
private Logger log = LoggerFactory.getLogger(ControllerShare.class);
@Context protected HttpServletRequest request;
@Inject private ControlerSession ctrlSession;
public BaseController() {}
@PostConstruct
private void verifInit() throws ExceptionTechnique {
log.warn("Checking CDI injection");
if (ctrlSession == null) {
log.error("controllerSession not initialized. Check your CDI configuration");
throw new ExceptionTechnique("serviceAccount not initialized. Check your CDI configuration.");
}
}
...
}
问题是在 ControllerShare 中正确完成了注入(我正确地看到了“检查 CDI 注入”),但在 BaseController 类中没有完成(ctrlSession 为空)。我尝试@Named 和其他组合但没有成功。注入只是在 ControllerShare 中完成,而不是在 BaseController 中完成。
编辑: 还有一件事:奇怪的是@Context 工作正常。我的请求已设置并且值正确。
感谢您的任何解释和解决方案。