Eh bien, j'ai regardé des didacticiels sur l'injection de dépendance du printemps ainsi que le MVC, mais je ne semble toujours pas comprendre comment nous pouvons instancier des classes spécifiquement?
Je veux dire si, par exemple, j'ai une variable p>
@Autowired ClassA someObject;
4 Réponses :
Oui, vous devez fournir un fichier context.xml dans lequel vous spécifiez les instances. Donnez-le à l'applicationContext et il vous permettra de passer à tous des champs pour vous. P>
Vous devez spécifier le type de la classe que vous souhaitez créer un objet dans votre applicationContext.xml ou vous pouvez annoter directement cette classe avec n'importe lequel de @Component code>, @service code> ou @Repository code> Si vous utilisez la dernière version du printemps. Dans web.xml, vous devez spécifier le chemin des fichiers XML comme paramètre contextuel à servlet, si vous utilisez une configuration xml. P>
D'accord, alors je disons que je dois avoir seulement la classée annotée avec la composante Annotation et le printemps instancera automatiquement un nouvel objet Classb () pour moi? Si la classe de classe et la classe de classb seraient annotées avec une annotation de composants, que feraient ensuite le printemps? Est-ce que je comprends cela correctement?
Si les deux sont annotés avec @Component, alors pendant que le câblage automatique, vous devrez utiliser l'annotation de qualificatif qui indique le ressort d'injecter ce haricot qui correspond à un nom que vous fournissez avec le qualificatif.
Envisagez également d'utiliser des descripteurs XML si cela est un cas commun pour vous.
Vous pouvez le faire comme ceci:
interface: p> implémentation: p> client: < / p> Vous avez maintenant défini votre interface, écrit une implémentation et l'a marquée comme composant - Docs ici . Maintenant, seule la chose à gauche est de dire printemps où trouver des composants afin qu'ils puissent être utilisés pour la mise en forme d'automne. P>
Merci, ça ressemble à une réponse vraiment géniale, je pense que je l'obtiens maintenant, je vais l'essayer maintenant. Une autre question, que si nous aurions besoin de passer des paramètres à certains constructeurs? Comment ressemblerait-il ou que l'utiliserait-nous?
Vous ne pouvez pas utiliser les annotations stéréotypes pour marquer des haricots basés sur le constructeur. Utilisez un constructeur par défaut avec des dépendances autonomes ou un recours à une configuration de bases Java / XML (supprimez l'annotation @Component et le contexte: élément de numérisation du composant). Voir ce message ici pour plus de détails: Javalbob.org/java/forums/t18396.htmlle: a>
Est-ce que quelqu'un lisait toujours ce fil? Ma question est - comment obtiendriez-vous la même chose sans utiliser @Autowired?
Cool, que si nous avons plusieurs implémentations? Comment voudriez-vous AUTOWIRE? Parce que vous avez la mise en demeure au niveau de service à droite? J'ai essayé de passer directement la mise en œuvre et il échoue. Peux-tu expliquer. Merci d'avance !
J'ai la même question que @pavansandeep. Quelqu'un a-t-il une réponse?
@Pavansandeep Si vous avez plusieurs implémentations d'une interface, vous devez utiliser le @qualifier code> Annotation (cf. docs.spring.io/spring-framework/docs/current/reeference/html/ ... ): Donné 2 implémentations d'une interface, chaque implémentation reçoit une annotation de niveau de classe avec un qualificatif unique, e. g. @qualifier ("interfaceimpl1") code> pour la première implémentation et @qualifier ("interfaceimpl2") code> pour la seconde. Une classe qui déclare l'interface comme une dépendance utilise le @qualifier (...) code> annotation pour identifier la mise en œuvre
Meilleures pratiques public class OrderProducer implements IOrderProducer{
private KafkaTemplate<String, String> _template;
public OrderProducer(KafkaTemplate<String, String> template) {
this._template = template;
}
public void CreateOrderProducer(String message){
this._template.send("Topic1", message);
}
}