【发布时间】:2013-12-06 11:45:11
【问题描述】:
我正在尝试通过 AnnotationLiteral 调用 CDI 托管 bean:
@Inject
@Any
private Instance<FacesI18nService> services;
public FacesI18nService produceFacesServiceProgrammatically(Domain domain) {
return services.select(new DomainQualifier(domain)).get();
}
DomainQualifier 只是一个标准的 AnnotationLiteral 实现:
public class DomainQualifier extends AnnotationLiteral<I18nResource> implements I18nResource {
private static final long serialVersionUID = 1L;
private final Domain domain;
public DomainQualifier(Domain domain) {
this.domain = domain;
}
@Override
public Domain value() {
return domain;
}
}
问题是我确实得到了一个新的FacesI18nService,它是通过相应的@Produces 方法生成的。但是,@Inject'd 的 FacesI18nService 成员始终是 null
@Produces
@I18nResource
public FacesI18nService produceFacesService(InjectionPoint ip) {
for (Annotation a : ip.getQualifiers()) {
if (a instanceof I18nResource) {
Domain domain = ((I18nResource) a).value();
return new FacesI18nService(new I18nService(domain, databaseBundleService));
}
}
throw new IllegalArgumentException("Could not find any matching qualifier");
}
那么,我在这里做错了什么?
【问题讨论】:
标签: jakarta-ee dependency-injection cdi