【发布时间】:2016-07-25 14:13:46
【问题描述】:
我对 CDI 没有一个非常简单的观点!
我的应用程序中有这些类:
public class CarrelloController extends AbstractController {
@Inject CarrelloService carrelloService;
...
}
@Stateless
public class CarrelloService implements CarrelloDataProvider {
...
}
public interface CarrelloDataProvider {
public Oggetto getSomething(String foo);
}
但是,我在部署后收到以下错误:
org.jboss.weld.exceptions.DeploymentException: WELD-001408: 带有限定符的 CarrelloService 类型的依赖关系不满足 @Default 在注入点 [BackedAnnotatedField] @Inject @Default it.footballlove.web.controller.CarrelloController.carrelloService 在 it.footballlove.web.controller.CarrelloController.carrelloService(CarrelloController.java:0)
在 org.jboss.weld.bootstrap.Validator.validateInjectionPointForDeploymentProblems(Validator.java:359) 在 org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:281) 在 org.jboss.weld.bootstrap.Validator.validateGeneralBean(Validator.java:134) 在 org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:155) 在 org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:518) 在 org.jboss.weld.bootstrap.ConcurrentValidator$1.doWork(ConcurrentValidator.java:68) 在 org.jboss.weld.bootstrap.ConcurrentValidator$1.doWork(ConcurrentValidator.java:66) 在 org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:60) 在 org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:53) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:745) 异常 0 :
我只使用一个界面。抽象类反而没有问题!
为什么?
【问题讨论】:
-
我不明白你的意思是什么我只能使用界面来理解。抽象类反而没有问题!。您发布的代码显示注入点的类型是类
CarrelloService,而不是它的接口CarrelloDataProvider。你为什么要这样做? -
因为在那种情况下我知道我需要那个具体的具体实现。如果我将 CarrelloDataProvider 定义为一个抽象类并让服务扩展它,我不会收到任何错误。
标签: java jakarta-ee dependency-injection cdi inject