Ich habe eine allgemeine Frage zum Thema Frühling gestellt: Automatisch gegossene Frühlingsbohnen und mehrere Leute haben geantwortet, dass der Aufruf von Spring ApplicationContext.getBean()
sollten so weit wie möglich vermieden werden. Warum ist das so?
Wie sollte ich sonst Zugriff auf die Beans erhalten, die ich mit Spring erstellt habe?
Ich verwende Spring in einer Nicht-Web-Anwendung und hatte geplant, den Zugriff auf eine freigegebene ApplicationContext
Objekt wie von LiorH beschrieben .
Abänderung
Ich akzeptiere die unten stehende Antwort, aber hier ist eine andere Meinung von Martin Fowler, der erörtert die Vorzüge von Dependency Injection gegenüber der Verwendung eines Service Locators (was im Wesentlichen dasselbe ist wie der Aufruf einer umhüllten ApplicationContext.getBean()
).
Fowler erklärt unter anderem: " Beim Service Locator fordert die Anwendungsklasse den Dienst explizit durch eine Nachricht an den Locator an. Bei der Injektion gibt es keine explizite Anfrage, der Dienst erscheint in der Anwendungsklasse - daher die Umkehrung der Kontrolle. Die Umkehrung der Kontrolle ist ein gängiges Merkmal von Frameworks, aber sie hat ihren Preis. Sie ist in der Regel schwer zu verstehen und führt zu Problemen bei der Fehlersuche. Im Großen und Ganzen ziehe ich es also vor, sie [die Umkehrung der Kontrolle] zu vermeiden, wenn ich sie nicht brauche. Das soll nicht heißen, dass es etwas Schlechtes ist, ich denke nur, dass es sich gegenüber der einfacheren Alternative rechtfertigen muss. "