Ich verwende Spring MVC für meine Webanwendung. Meine Bohnen sind in der spring-servlet.xml
Datei " " geschrieben
Jetzt habe ich eine Klasse MyClass
und möchte mit Spring Bean auf diese Klasse zugreifen
In der habe spring-servlet.xml
ich folgendes geschrieben
<bean id="myClass" class="com.lynas.MyClass" />
Jetzt muss ich mit darauf zugreifen ApplicationContext
ApplicationContext context = ??
Damit ich es tun kann
MyClass myClass = (MyClass) context.getBean("myClass");
Wie macht man das??
java
spring
spring-mvc
servlets
LynAs
quelle
quelle
Antworten:
Einfach injizieren ..
oder implementieren Sie diese Schnittstelle: ApplicationContextAware
quelle
ApplicationContextProvider.java
Antwort scheint die zuverlässigste Lösung dafür zu sein.Ich denke, dieser Link zeigt den besten Weg, um Anwendungskontext überall abzurufen, selbst in der Nicht-Bean-Klasse. Ich finde es sehr nützlich. Hoffe es ist das gleiche für dich. Das Folgende ist der abstrakte Code davon
Erstellen Sie eine neue Klasse ApplicationContextProvider.java
Fügen Sie einen Eintrag in application-context.xml hinzu
Im Fall von Anmerkungen (anstelle von application-context.xml)
Holen Sie sich den Kontext so
Prost!!
quelle
ApplicationContextProvider.getApplicationContext()
Methode. Wenn es dann Zeit ist, den aktuellen App-Kontext zu benötigen, rufe ichApplicationContextProvider appContext = ApplicationContextProvider.getApplicationContext()
@Component
OnApplicationContextProvider
kann Konfiguration inaplication-context.xml
Falls Sie über einen HttpServlet auf den Kontext zugreifen müssen, der selbst nicht von Spring instanziiert wird (und daher weder @Autowire noch ApplicationContextAware funktionieren) ...
oder
Überlegen Sie sich einige der anderen Antworten, bevor Sie dies tun:
... da dies Ihnen nicht den aktuellen Kontext gibt, sondern eine weitere Instanz davon für Sie erstellt. Dies bedeutet, dass 1) ein erheblicher Speicherbereich und 2) Beans nicht zwischen diesen beiden Anwendungskontexten geteilt werden.
quelle
Wenn Sie eine Klasse implementieren, die nicht von Spring instanziiert wurde, wie z. B. einen JsonDeserializer, können Sie Folgendes verwenden:
quelle
ContextLoader.getCurrentWebApplicationContext()
Fügen Sie dies Ihrem Code hinzu
Dadurch wird myClass einfach in Ihre Anwendung eingefügt
quelle
basierend auf Viveks Antwort, aber ich denke, das Folgende wäre besser:
Das Schreiben von einer Instanzmethode in ein statisches Feld ist eine schlechte Praxis und gefährlich, wenn mehrere Instanzen manipuliert werden.
quelle
org.springframework.core.io.ContextResource
Schnittstelle. Ich würde vorschlagen, einen anderen Namen für die innere Klasse zu wählenContextResource
, um Unordnung zu vermeiden.Es gibt viele Möglichkeiten, den Anwendungskontext in der Spring-Anwendung abzurufen. Diese sind unten angegeben:
Über ApplicationContextAware :
Hier erhalten
setApplicationContext(ApplicationContext applicationContext)
Sie den applicationContextÜber Autowired :
Hier
@Autowired
liefert das Schlüsselwort den applicationContext.Für weitere Informationen besuchen Sie diesen Thread
Vielen Dank :)
quelle
Eine andere Möglichkeit besteht darin, applicationContext über das Servlet einzufügen.
Dies ist ein Beispiel für das Einfügen von Abhängigkeiten bei Verwendung von Spring-Webdiensten.
Alternativ können Sie den Anwendungskontext wie unten gezeigt in Ihre web.xml einfügen
Grundsätzlich versuchen Sie, dem Servlet mitzuteilen, dass es nach Beans suchen soll, die in diesen Kontextdateien definiert sind.
quelle
Schritt 1 : Injizieren Sie den folgenden Code in die Klasse
Schritt 2 : Schreiben Sie Getter & Setter
Schritt 3 : Definieren Sie autowire = "byType" in der XML-Datei, in der die Bean definiert ist
quelle
Selbst nach dem Hinzufügen von @Autowire, wenn Ihre Klasse kein RestController oder keine Konfigurationsklasse ist, wurde das applicationContext-Objekt als null angezeigt. Versucht, eine neue Klasse mit unten zu erstellen und es funktioniert gut:
Sie können dann eine Getter-Methode in derselben Klasse implementieren, die Ihren Anforderungen entspricht, z. B. die Referenz für die implementierte Klasse abrufen durch:
quelle
Dann können Sie die Bohne abrufen:
Referenz: springbyexample.org
quelle