J'ai une application qui a plusieurs écrans et chaque écran est sélectionné via un bouton. Chaque écran contient des composants assez lourds, il est donc important que seul l'écran d'activation soit en mémoire - tous les autres devraient être disponibles pour la récupération de place.Utilisation de getBean par opposition à l'injection de méthode au printemps
L'application utilise ressort pour la colle et actuellement il commute les écrans à l'aide de getBean():
//event handler for a specific button
public void actionPerformed(Event e) {
setScreen((Screen) applicationContext.getBean("screen1"));
}
« screen1 » est un grain de prototype de sorte qu'une nouvelle instance de l'écran est créé lorsque le bouton est enfoncé. En outre, setScreen() est le seul endroit où une référence à Screen est maintenue dans l'application, de sorte que l'écran précédemment actif sera disponible pour la récupération de place. Je ne l'ai pas encore testé mais je m'attends à ce que ça fonctionne bien - pas de science de fusée ici! Le problème est - après avoir lu this page sur pourquoi getBean() est considéré comme mauvais - je me demande s'il existe une façon plus idiomatique d'obtenir les mêmes résultats tout en supprimant la dépendance sur getBean().
J'ai examiné l'injection de méthode et il me semble introduire la complexité avec peu d'avantages. C'est un autre concept à apprendre, plus magique, qui ajoute une dépendance à CGLIB, etc. Si je veux vraiment supprimer la dépendance à Spring, je peux simplement introduire une interface qui expose la méthode getBean().
Est-ce que getBean() et l'injection de méthode sont les seules options dans mon cas ou ai-je manqué quelque chose?
Et si oui, getBean() est-il vraiment si mauvais?
Donc dans votre solution, getbean() est invoqué dans la méthode factory create(), n'est-ce pas? –
Pas exactement. Il est remplacé par une méthode d'usine, mais il est beaucoup plus facile de se moquer de l'interface ci-dessus que de se moquer d'un contexte d'application. Plus c'est branché. En fin de compte, il s'agit d'une implémentation un peu plus simple de l'injection de méthode de Spring http://static.springsource.org/spring/docs/2.5.x/reference/beans.html # beans-factory-lookup-méthode-injection – cletus
Je vois, mais d'où vient la méthode factory create() obtenir son instance de l'écran? –