Question

Comment puis-je utiliser JSR-299 CDI à injection (non annotée) haricots de bibliothèques externes?

Exemples:

Interface X et ses mises en œuvre proviennent d'un tiers lib. Comment puis-je décider la mise en œuvre à utiliser?

class A {

    @Inject 
    private X x;

}

Et si j'avais plusieurs classes en utilisant l'interface X mais différentes implémentations?

class A {

    @Inject 
    private X x; // should be XDefaultImpl

}

class B {

    @Inject 
    private X x; // should be XSpecialImpl

}
Était-ce utile?

La solution

Utilisez les producteurs:

public class ClassInABeanArchive {
    @Produces @SpecialX public X createSpecialX() {
        return new XSpecialImpl();
    }

    @Produces @DefaultX public X createDefaultX() {
        return new XDefaultImpl();
    }
}

Vous devrez définir les qualificatifs de @SpecialX et @DefaultX. et de les utiliser conjointement avec @Inject:

@Qualifier
@Retention(..)
@Target(..)
public @interface SpecialX {}

Si vous n'avez pas besoin de différencier deux implémentations, sauter la partie des qualifications.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top