我正在尝试在 JDev 12.2.1 的 ADF 应用程序中使用 Java EE CDI,但即使是这个简单的案例:
public class ClassA { }
public class ClassB {
@Inject ClassA injected;
}
它似乎创建了 ClassA bean 的两个副本,但失败并出现 Ambiguous dependencies 错误。还有其他人让 CDI 在 JDev 12.2.1 中工作吗?是否有我弄错的项目或 weblogic 设置?
weblogic.management.DeploymentException: CDI deployment failure:WELD-001409: Ambiguous dependencies for type ClassA with qualifiers @Default
at injection point [BackedAnnotatedField] @Inject private ca.bluecross.ab.muw.view.controller.ClassB.injected
at ca.bluecross.ab.muw.view.controller.ClassB.injected(ClassB.java:0)
Possible dependencies:
- Managed Bean [class ca.bluecross.ab.muw.view.controller.ClassA] with qualifiers [@Any @Default],
- Managed Bean [class ca.bluecross.ab.muw.view.controller.ClassA] with qualifiers [@Any @Default]
:org.jboss.weld.exceptions.DeploymentException:WELD-001409: Ambiguous dependencies for type ClassA with qualifiers @Default
at injection point [BackedAnnotatedField] @Inject private ca.bluecross.ab.muw.view.controller.ClassB.injected
at ca.bluecross.ab.muw.view.controller.ClassB.injected(ClassB.java:0)
Possible dependencies:
- Managed Bean [class ca.bluecross.ab.muw.view.controller.ClassA] with qualifiers [@Any @Default],
- Managed Bean [class ca.bluecross.ab.muw.view.controller.ClassA] with qualifiers [@Any @Default]
at org.jboss.weld.bootstrap.Validator.validateInjectionPointForDeploymentProblems(Validator.java:367)
at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:281)
at org.jboss.weld.bootstrap.Validator.validateGeneralBean(Validator.java:134)
at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:155)
at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:518)
Truncated. see log file for complete stacktrace
Class ClassA 有一个默认范围,它是 @Dependent。这个 bean 将在注入点创建。查看类 ClassA 的 bean 将在哪里创建和注入。销毁范围为 @Dependent 的 bean 取决于将注入它的类的实例。如果你没有这个点,那么创建它,或者改变这个 bean 的范围。例如放置@ApplicationScope 并检查它。