CDI:@Produces方法在使用AnnotationLiteral调用Instance后没有注入

时间:2013-12-06 11:45:11

标签: java-ee dependency-injection cdi

我正在尝试通过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

那么,我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

好吧..明白了羞耻

为了生成CDI托管bean,不应该实例化返回值,而是将其作为参数传递给方法,并返回此参数作为结果。

@Produces
@Dependent
@I18nResource
public FacesI18nService produceFacesService(InjectionPoint ip, @New FacesI18nService ret) {

    [...]

    ret.setI18nService(new I18nService(domain, databaseBundleService));
    return ret;
}