我正在尝试通过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
的{{1}}成员始终为FacesI18nService
null
那么,我在这里做错了什么?
答案 0 :(得分:1)
好吧..明白了羞耻
为了生成CDI托管bean,不应该实例化返回值,而是将其作为参数传递给方法,并返回此参数作为结果。
@Produces
@Dependent
@I18nResource
public FacesI18nService produceFacesService(InjectionPoint ip, @New FacesI18nService ret) {
[...]
ret.setI18nService(new I18nService(domain, databaseBundleService));
return ret;
}