Comment créer des instances à la volée dans CDI
Supposons que j'ai une Voiture de classe. Dans mon code je veux créer des 10 voitures. Voiture de classe a certains @Inject annoté dépendances. Quelle serait la meilleure approche pour ce faire?
CDI dispose d'une interface de Fournisseur que je peux utiliser pour créer des voitures:
@Inject Provider<Car> carProvider;
public void businessMethod(){
Car car = carProvider.get();
}
Malheureusement cela ne fonctionne pas si je n'ai pas de CarFactory qui a une méthode avec @Produit annotation qui crée de la voiture. D'autant qu'il reflète le monde réel, que je ne créer des voitures sans une usine, je préfère ne pas écrire usines pour tout. Je veux juste le conteneur CDI pour créer ma voiture, tout comme toute autre bean. Comment voulez-vous recommander je créer ces Voitures?
source d'informationauteur palto
Vous devez vous connecter pour publier un commentaire.
Suffit d'utiliser javax.de l'entreprise.injecter.Exemple de l'interface à la place.
Comme ceci:
Mon modèle préféré pour la programmation de recherche est d'utiliser
CDI.current().select().get()
.Démontré ici.
La servlet a une dépendance sur deux CDI de haricots, d'une portée de la requête et de la demande portée:
La classe de test qui utilise cette servlet peut être trouvé ici.
Examiner le code et vous remarquerez que le code est entièrement équivalent avec ce que vous pourriez obtenir en utilisant
@Inject MyBean myBean;
.Vous pouvez utiliser des qualificatifs avec votre @Produit annotations:
échantillon-producteur-méthode:
utilisation:
Une autre façon de faire, il serait simple de ne pas donner de Voiture CDI portée, ce qui le rend dépendant et vous obtiendrez une nouvelle instance à chaque fois qu'il est injecté, et ces cas ne sera pas détruite jusqu'à ce que le contenant de l'instance est détruite.