Es gibt viele Möglichkeiten, Beans in Spring zu erhalten:
Die erste: Speichern Sie das ApplicationContext-Objekt während der Initialisierung
ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml"); ac.getBean("beanId");
Hinweis: Diese Methode ist für diejenigen geeignet, die das verwenden Für eigenständige Anwendungen muss das Programm Spring manuell über die Konfigurationsdatei initialisieren.
Zweitens: Erhalten Sie das ApplicationContext-Objekt über die von Spring bereitgestellte Toolklasse
import org.springframework.web.context.support.WebApplicationContextUtils; ApplicationContext ac1 = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc); ApplicationContext ac2 = WebApplicationContextUtils.getWebApplicationContext(ServletContext sc); ac1.getBean("beanId"); ac2.getBean("beanId");
Erklärung:
1 Diese beiden Methoden eignen sich für B/S-Systeme, die das Spring-Framework verwenden, über den ServletContext Objekt Rufen Sie das ApplicationContext-Objekt ab und verwenden Sie es, um die erforderliche Klasseninstanz abzurufen.
2 Die erste Methode löst eine Ausnahme aus, und die zweite Methode gibt null zurück.
Dritte Methode: Von der abstrakten Klasse ApplicationObjectSupport geerbt
Beschreibung: Die ApplicationContext-Instanz kann einfach über die von der abstrakten Klasse ApplicationObjectSupport bereitgestellte Methode getApplicationContext() abgerufen werden, und dann können die Beans im Spring-Container sein erhalten. Wenn Spring initialisiert wird, wird das ApplicationContext-Objekt über die Methode setApplicationContext(ApplicationContext context) der abstrakten Klasse eingefügt.
Vierte Methode: Von der abstrakten Klasse WebApplicationObjectSupport geerbt
Erklärung: Ähnlich wie bei der obigen Methode erhalten Sie die WebApplicationContext-Instanz durch Aufrufen von getWebApplicationContext();
Fünfte Methode: Implementieren Sie die Schnittstelle ApplicationContextAware
Beschreibung: Implementieren Sie die Methode setApplicationContext(ApplicationContext context) dieser Schnittstelle und speichern Sie das ApplicationContext-Objekt. Wenn Spring initialisiert wird, wird das ApplicationContext-Objekt über diese Methode injiziert.
Obwohl Spring die letzten drei Methoden bereitstellt, um die entsprechende Klasse oder Schnittstelle in gewöhnlichen Klassen zu erben oder zu implementieren, um das ApplicationContext-Objekt von Spring zu erhalten, müssen Sie bei der Verwendung darauf achten, diese abstrakten Klassen oder Schnittstellen zu erben oder zu implementieren Die Java-Klasse der Schnittstelle muss in der Spring-Konfigurationsdatei (d. h. der Datei application-context.xml) konfiguriert werden, andernfalls ist das erhaltene ApplicationContext-Objekt null.
Im Folgenden wird gezeigt, wie Sie Beans im Spring-Container durch Implementierung der Schnittstelle ApplicationContextAware erhalten:
Passen Sie zunächst eine Klasse an, die die Schnittstelle ApplicationContextAware implementiert, und implementieren Sie die darin enthaltenen Methoden:
package com.ghj.tool; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; public class SpringConfigTool implements ApplicationContextAware {// extends ApplicationObjectSupport{ private static ApplicationContext ac = null; private static SpringConfigTool springConfigTool = null; public synchronized static SpringConfigTool init() { if (springConfigTool == null) { springConfigTool = new SpringConfigTool(); } return springConfigTool; } public void setApplicationContext(ApplicationContext applicationContext)throws BeansException { ac = applicationContext; } public synchronized static Object getBean(String beanName) { return ac.getBean(beanName); } }
Als nächstes konfigurieren Sie es in der Datei applicationContext.xml:
<bean id="SpringConfigTool" class="com.ghj.tool.SpringConfigTool"/>
Schließlich können Sie die entsprechende Bean im Spring-Container über den folgenden Code abrufen:
SpringConfigTool.getBean("beanId");
Beachten Sie, dass Sie den Spring-Container nicht über die folgenden Methoden erhalten können, wenn der Server die Initialisierung des Spring-Containers startet: Hilfe.
import org.springframework.web.context.ContextLoader; import org.springframework.web.context.WebApplicationContext; WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext(); wac.getBean(beanID);