【发布时间】:2015-05-08 09:45:42
【问题描述】:
我被臭名昭著的 WELD-001408 困住了,每个使用 CDI 编程的人都以某种方式遇到过。使用 Oracle JDK 1.8.0_25、Wildfly 8.2.0.Final。我的代码如下:
模块 availability-service (war) 依赖于模块 hospital-user (jar)。前者在WEB-INF 中有一个beans.xml,后来在META-INF 中有一个beans.xml,尽管CDI 1.1 不需要beans.xml。
在hospital-user:
@ApplicationScoped
public class Users {
@Produces
@Doctors
public List<Doctor> getDoctors() {
return getUsers("/doctors.json", Doctor.class);
}
@Produces
@Patients
public List<Patient> getPatients() {
return getUsers("/patients.json", Patient.class);
}
}
Doctors 注解(Patients 类似,只是名字不同):
@Qualifier
@Retention(RUNTIME)
@Target({ FIELD, METHOD })
public @interface Doctors {
}
在availability-service:
@ApplicationScoped
public class AvailabilityService {
@Inject
@Doctors
private List<Doctor> doctors;
}
错误:
Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type List<Doctor> with qualifiers @Doctors
at injection point [BackedAnnotatedField] @Inject @Doctors private name.abhijitsarkar.microservices.availability.AvailabilityService.doctors
at name.abhijitsarkar.microservices.availability.AvailabilityService.doctors(AvailabilityService.java:0)
at org.jboss.weld.bootstrap.Validator.validateInjectionPointForDeploymentProblems(Validator.java:372)
如果我注入 Users 而不是 List,它会起作用。 Here 是一个示例 Maven 项目,它演示了 4 个类的问题。只需运行mvn clean test。
【问题讨论】:
标签: dependency-injection cdi wildfly inject weld