Comment injecter des haricots de libs externes avec CDI?
-
24-10-2019 - |
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
}
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