Printemps autowire interface
J'ai une Interface IMenuItem
public interface IMenuItem {
String getIconClass();
void setIconClass(String iconClass);
String getLink();
void setLink(String link);
String getText();
void setText(String text);
}
Puis j'ai une implémentation de cette interface
@Component
@Scope("prototype")
public class MenuItem implements IMenuItem {
private String iconClass;
private String link;
private String text;
public MenuItem(String iconClass, String link, String text) {
this.iconClass = iconClass;
this.link = link;
this.text = text;
}
//setters and getters
}
Est-il possible de créer plusieurs instances de MenuItem à partir d'une classe de configuration, en utilisant uniquement le IMenuItem interface? avec @autocâblés ou quelque chose ? Aussi est-il possible de autowire en précisant les arguments du constructeur ?
OriginalL'auteur adi.neag | 2015-06-30
Vous devez vous connecter pour publier un commentaire.
@Autowired
est en fait parfait pour ce scénario. Vous pouvez soit autowire une classe spécifique (mise en œuvre) ou l'utilisation d'une interface.Considérons cet exemple:
Maintenant, vous pouvez choisir l'une de ces implémentations seront utilisés simplement par le choix d'un nom pour l'objet, selon les
@Component
annotation valeurComme ceci:
Pour la création de la même instance à plusieurs reprises, vous pouvez utiliser le @Qualifier d'annotation pour spécifier la mise en œuvre sera utilisée:
Dans le cas où vous avez besoin d'instancier les éléments de certains paramètres du constructeur, vous devez spécifier un fichier de configuration XML. Bon tutoriel sur l'utilisation de qulifiers et permettra à l'autowiring peut être trouvé ICI.
Voir le fichier de réponse, j'espère que ça aide. Vous aurez besoin de la qualifier d'annotation
OriginalL'auteur Smajl
je crois que la moitié du travail est fait par votre
@scope
annotation , si ce n'est pas tout-autre mise en œuvre de ImenuItem interface dans votre projet ci-dessous permettra de créer plusieurs instancesmais si il y a plusieurs implémentations, vous devez utiliser
@Qualifer
annotation .cela permettra également de créer plusieurs instances
vous avez besoin d'annoter constructeur avec @Autocâblés . mais il ne fonctionne pas avec le type de données primitif , vous devez créer un autre Pojo avec de la Ficelle iconClass, Chaîne de lien, Chaîne de texte et de les injecter que Pojo de fèves
Pourquoi créer plusieurs instances lorsqu'un seul de la mise en œuvre est là pour
IMenuItem
interface?OriginalL'auteur Bhupi