Ich kann nicht einen sehr einfachen Punkt auf CDI bekommen!Inject Schnittstelle Implementierung mit CDI
Ich habe diese Klassen in meiner Anwendung:
public class CarrelloController extends AbstractController {
@Inject CarrelloService carrelloService;
...
}
@Stateless
public class CarrelloService implements CarrelloDataProvider {
...
}
public interface CarrelloDataProvider {
public Oggetto getSomething(String foo);
}
Allerdings ist mir die folgende Fehlermeldung erhalten, nach der Bereitstellung:
org.jboss.weld.exceptions.DeploymentException: WELD-001408 : Unzufriedene Abhängigkeiten für den Typ CarrelloService mit Qualifiern @Default am Injektionspunkt [BackedAnnotatedField] @Inject @Default it.footballove.web.controller.CarrelloController.carrelloService unter it.footballove.web.controller.CarrelloController.carrelloService (CarrelloController.java:0)
bei org.jboss.weld.bootstrap.Validator.validateInjectionPointForDeploymentProblems (Validator.java:359) bei org.jboss. weld.bootstrap.Validator.validateInjectionPoint (Validator.java:281) bei org.jboss.weld.bootstrap.Validator.validateGeneralBean (Validator.java:134) bei org.jboss.weld.bootstrap.Validator.validateRIBean (Validator.java:155) unter org.jboss.weld.bootstrap.Validator.validateBean (Validator.java:518) unter org.jboss.weld.b ootstrap.ConcurrentValidator $ 1.doWork (ConcurrentValidator.java:68) bei org.jboss.weld.bootstrap.ConcurrentValidator $ 1.doWork (ConcurrentValidator.java:66) bei org.jboss.weld.executor.IterativeWorkerTaskFactory $ 1.call (IterativeWorkerTaskFactory.java:60) bei org.jboss.weld.executor.IterativeWorkerTaskFactory $ 1.call (IterativeWorkerTaskFactory.java:53) bei java.util.concurrent.FutureTask.run (FutureTask.java:266) bei java .util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142) um java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:617) bei java.lang.Thread.run (Thread.java: 745) Ausnahme 0:
Ich bekomme das nur mit einer Schnittstelle. Abstrakte Klasse macht stattdessen kein Problem!
Warum?
Ich verstehe nicht, was du meinst mit _Ich bekomme das nur mit einer Schnittstelle. Abstrakte Klasse macht stattdessen kein Problem! _. Der von Ihnen gepostete Code zeigt, dass der Typ des Injektionspunkts die Klasse "CarrelloService" und nicht dessen Schnittstelle "CarrelloDataProvider" ist. Warum machst du das? –
Denn in diesem Fall weiß ich, dass ich diese konkrete konkrete Umsetzung brauche. Wenn ich CarrelloDataProvider als eine abstrakte Klasse definieren und den Dienst erweitern, erhalte ich keine Fehler. –