Spring – IoC Containers

author
3 minutes, 4 seconds Read

Der Spring IoC Container ist das Herzstück des Spring Frameworks. Der Container erstellt die Objekte, verdrahtet sie miteinander, konfiguriert sie und verwaltet ihren kompletten Lebenszyklus von der Erstellung bis zur Zerstörung. Der Spring-Container verwendet Dependency Injection (DI), um die Komponenten zu verwalten, aus denen eine Anwendung besteht.

Spring bietet die folgenden zwei Arten von Containern.

  1. BeanFactory-Container
  2. ApplicationContext-Container

Weiterlesen: Inversion of Control und Dependency Injection

BeanFactory

Eine BeanFactory ist im Grunde nichts anderes als die Schnittstelle für eine fortgeschrittene Fabrik, die in der Lage ist, ein Verzeichnis verschiedener Beans und ihrer Abhängigkeiten zu verwalten.

Das BeanFactory ermöglicht es uns, Bean-Definitionen zu lesen und über die BeanFactory darauf zuzugreifen.

1.1. Wie man eine BeanFactory erstellt

Wenn wir nur die BeanFactory verwenden, können wir eine erstellen und einige Bean-Definitionen im XML-Format wie folgt einlesen:

Andere Möglichkeiten, eine Bean-Factory zu erstellen, sind wie folgt:

Im Grunde ist das alles, was es gibt. Mit getBean(String) können Sie Instanzen Ihrer Beans abrufen; die clientseitige Ansicht der BeanFactory ist überraschend einfach.

1.2. BeanFactory-Methoden

Die BeanFactory-Schnittstelle hat nur sechs Methoden, die der Client-Code aufrufen kann:

  1. boolean containsBean(String): gibt true zurück, wenn die BeanFactory eine Bean-Definition oder Bean-Instanz enthält, die mit dem angegebenen Namen übereinstimmt
  2. Object getBean(String): gibt eine Instanz der unter dem angegebenen Namen registrierten Bean zurück. Je nachdem, wie die Bean durch die BeanFactory-Konfiguration konfiguriert wurde, wird entweder eine singleton und damit gemeinsam genutzte Instanz oder eine neu erstellte Bean zurückgegeben. Ein BeansException wird geworfen, wenn entweder die Bean nicht gefunden werden konnte (in diesem Fall ist es ein NoSuchBeanDefinitionException), oder eine Ausnahme während der Instanzierung und Vorbereitung der Bean aufgetreten ist
  3. Object getBean(String, Class): gibt eine Bean zurück, die unter dem angegebenen Namen registriert ist. Die zurückgegebene Bean wird in die angegebene Klasse gecastet. Wenn die Bean nicht gecastet werden konnte, werden entsprechende Ausnahmen geworfen (BeanNotOfRequiredTypeException). Außerdem gelten alle Regeln der Methode getBean(String) (siehe oben)
  4. Class getType(String name): gibt die Class der Bean mit dem angegebenen Namen zurück. Wenn keine Bean mit dem angegebenen Namen gefunden werden konnte, wird ein NoSuchBeanDefinitionException ausgelöst
  5. boolean isSingleton(String): ermittelt, ob die unter dem angegebenen Namen registrierte Bean-Definition oder Bean-Instanz ein Singleton ist oder nicht. Wenn keine Bean, die dem angegebenen Namen entspricht, gefunden werden konnte, wird ein NoSuchBeanDefinitionException ausgelöst
  6. String getAliases(String): Gibt die Aliase für den gegebenen Bean-Namen zurück, falls welche in der Bean-Definition definiert wurden

ApplicationContext

Der ApplicationContext-Container fügt weitere unternehmensspezifische Funktionen hinzu, wie z.B. die Fähigkeit, Textnachrichten aus einer Properties-Datei aufzulösen und die Fähigkeit, Anwendungsereignisse an interessierte Event-Listener zu veröffentlichen. Dieser Container wird durch das org.springframework.context.ApplicationContext-Interface definiert.

Der ApplicationContext-Container enthält alle Funktionen des BeanFactory-Containers, so dass er im Allgemeinen gegenüber der BeanFactory empfohlen wird. BeanFactoryDer ApplicationContext-Container kann dennoch für leichtgewichtige Anwendungen wie mobile Geräte oder Applet-basierte Anwendungen verwendet werden, bei denen Datenvolumen und Geschwindigkeit von Bedeutung sind.

2.1. Typen von ApplicationContext

Die am häufigsten verwendeten ApplicationContext Implementierungen sind:

  1. FileSystemXmlApplicationContext – Dieser Container lädt die Definitionen der Beans aus einer XML-Datei. Hier müssen Sie den vollständigen Pfad der XML-Bean-Konfigurationsdatei an den Konstruktor übergeben.
  2. ClassPathXmlApplicationContext – Dieser Container lädt die Definitionen der Beans aus einer XML-Datei. Hier müssen Sie nicht den vollständigen Pfad der XML-Datei angeben, aber Sie müssen CLASSPATH richtig einstellen, da dieser Container die XML-Konfigurationsdatei der Beans im CLASSPATH suchen wird.
  3. WebXmlApplicationContext – Dieser Container lädt die XML-Datei mit den Definitionen aller Beans aus einer Webanwendung.

2.2. Wie wird ein ApplicationContext erstellt

Ein Beispielcode für die Instanziierung eines Application Contexts sieht wie folgt aus.

Similar Posts

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.