it-swarm.com.de

Was in aller Welt sind Frühlingsbohnen?

Ich muss noch eine Definition von Spring Beans auf hoher Ebene finden, die ich verstehen kann. Ich sehe sie oft in Grails Dokumentation und Büchern referenziert, aber ich denke, dass das Verstehen, was sie sind, von Vorteil wäre. Was sind Frühlingsbohnen? Wie können sie eingesetzt werden? Haben sie etwas mit Abhängigkeitsinjektion zu tun?

361

Die Objekte, die das Rückgrat Ihrer Anwendung bilden und vom Spring IoC * -Container verwaltet werden, werden als Beans bezeichnet. Eine Bean ist ein Objekt, das von einem Spring-IoC-Container instanziiert, zusammengestellt und anderweitig verwaltet wird. Diese Beans werden mit den Konfigurationsmetadaten erstellt, die Sie dem Container z. B. in Form von XML-Definitionen bereitstellen.

Weitere Informationen zu Bohnen und Umfang finden Sie unter SpringSource :

Wenn Sie eine Bean-Definition erstellen, ist das, was Sie tatsächlich erstellen, ein Rezept zum Erstellen tatsächlicher Instanzen der durch diese Bean-Definition definierten Klasse. Die Idee, dass eine Bean-Definition ein Rezept ist, ist wichtig, da dies bedeutet, dass genau wie bei einer Klasse möglicherweise viele Objektinstanzen aus einem einzelnen Rezept erstellt werden können.

Sie können nicht nur die verschiedenen Abhängigkeiten und Konfigurationswerte steuern, die in ein Objekt eingefügt werden sollen, das aus einer bestimmten Bean-Definition erstellt wurde, sondern auch den Umfang der Objekte, die aus einer bestimmten Bean-Definition erstellt wurden. Dieser Ansatz ist sehr leistungsfähig und bietet Ihnen die Flexibilität, den Bereich der Objekte zu wählen, die Sie durch Konfiguration erstellen, anstatt den Bereich eines Objekts auf der Klassenebene Java einbinden zu müssen. Beans können so definiert werden, dass sie in einem von mehreren Bereichen bereitgestellt werden

* IoC: Umkehrung der Kontrolle

192
Juned Ahsan

Spring Beans sind nur Objektinstanzen, die vom Spring-Container verwaltet werden, dh, sie werden vom Framework erstellt und verkabelt und in eine "Tüte mit Objekten" (den Container) gestellt, von der Sie sie später abrufen können.

Der "Verkabelungsteil" dort ist, worum es bei der Abhängigkeitsinjektion geht, was bedeutet, dass Sie einfach "Ich werde dieses Ding brauchen" sagen können und das Framework einige Regeln befolgen wird, um die richtige Instanz für Sie zu erhalten.

Für jemanden, der Spring nicht gewohnt ist, denke ich Wikipedia Springs Artikel hat eine nette Beschreibung :

Im Mittelpunkt des Spring Frameworks steht die Inversion des Steuerungscontainers, der eine konsistente Möglichkeit zum Konfigurieren und Verwalten von Java -Objekten mithilfe von Reflektion bietet. Der Container ist für die Verwaltung des Objektlebenszyklus bestimmter Objekte verantwortlich: Er erstellt diese Objekte, ruft ihre Initialisierungsmethoden auf und konfiguriert diese Objekte, indem er sie miteinander verbindet.

Vom Container erstellte Objekte werden auch als verwaltete Objekte oder Beans bezeichnet. Der Container kann durch Laden von XML-Dateien oder Erkennen bestimmter Java -Anmerkungen in Konfigurationsklassen konfiguriert werden. Diese Datenquellen enthalten die Bean-Definitionen, die die zum Erstellen der Beans erforderlichen Informationen enthalten.

Objekte können entweder mittels Abhängigkeitssuche oder Abhängigkeitsinjektion erhalten werden. Die Abhängigkeitssuche ist ein Muster, bei dem ein Aufrufer das Containerobjekt nach einem Objekt mit einem bestimmten Namen oder einem bestimmten Typ fragt. Die Abhängigkeitsinjektion ist ein Muster, bei dem der Container Objekte über Konstruktoren, Eigenschaften oder Factory-Methoden namentlich an andere Objekte übergibt.

121
Elias Dorneles

Lassen Sie uns zuerst den Frühling verstehen:

Der Frühling ist ein leichter und flexibler Rahmen.

Analogie:
enter image description here

Bean: ist ein Objekt, das in Spring Container erstellt, verwaltet und zerstört wird. Wir können ein Objekt über die Metadaten (entweder XML oder Annotation) in den Spring Container einfügen, was als Inversion der Steuerung bezeichnet wird.

Analogie: Nehmen wir an, der Landwirt hat ein Ackerland, das mit Samen (oder Bohnen) bewirtschaftet wird. Hier ist Farmer Spring Framework, Ackerland ist Spring Container, Bohnen sind Spring Beans, Anbau ist Spring Processors.

enter image description here

Wie der Bohnen-Lebenszyklus haben auch die Frühlingsbohnen einen eigenen Lebenszyklus.

enter image description here

enter image description here

img source

Es folgt die Sequenz eines Bohnenlebenszyklus im Frühjahr:

  • Instanziieren: Zuerst findet der Spring-Container die Definition der Bean aus der XML-Datei und instanziiert die Bean.

  • Eigenschaften füllen: Mit der Abhängigkeitsinjektion füllt spring alle Eigenschaften wie in der Bean-Definition angegeben.

  • Set Bean Name: Wenn die Bean die Schnittstelle BeanNameAware implementiert, übergibt spring die ID der Bean an die Methode setBeanName().

  • Bean Factory setzen: Wenn Bean die Schnittstelle BeanFactoryAware implementiert, übergibt spring die Bean Factory an die Methode setBeanFactory().

  • Pre-Initialization: Wird auch Post-Process von Bean genannt. Wenn der Bean BeanPostProcessors zugeordnet sind, ruft Spring die Methode postProcesserBeforeInitialization() auf.

  • Beans initialisieren: Wenn das Bean IntializingBean implementiert, wird dessen Methode afterPropertySet() aufgerufen. Wenn das Bean eine Init-Methodendeklaration hat, wird die angegebene Initialisierungsmethode aufgerufen.

  • Nach der Initialisierung: - Wenn der Bean BeanPostProcessors zugeordnet ist, werden deren postProcessAfterInitialization() Methoden aufgerufen.

  • Gebrauchsfertig: Jetzt ist die Bohne für die Anwendung gebrauchsfertig

  • Destroy: Wenn das Bean DisposableBean implementiert, wird die Methode destroy() aufgerufen

38
Premraj

Nun, Sie haben es teilweise verstanden. Sie müssen die Bohnen nach Ihren Wünschen zuschneiden und Spring Container informieren, um sie bei Bedarf zu verwalten, indem Sie eine Methode verwenden, die allgemein als IoC ( Inversion of Control ) bezeichnet wird und von Martin Fowler geprägt wird =, auch bekannt als Abhängigkeitsinjektion (DI).

Sie verdrahten die Beans so, dass Sie sich nicht um die Instanziierung kümmern oder die Abhängigkeit von der Bean bewerten müssen. Dies ist im Volksmund als Hollywood-Prinzip bekannt.

Google ist das beste Tool, um mehr darüber zu erfahren, zusätzlich zu den Links, mit denen Sie hier in dieser Frage überflutet würden. :)

22
dmahapatro

Frühling haben den IoC Behälter, der den Beutel der Bohne trägt; Erstellung, Pflege und Löschung liegen in der Verantwortung von Spring Container. Wir können die Bohne durch Wiring und Auto Wiring in Spring setzen. Wiring bedeutet, dass wir es manuell in die XML-Datei konfigurieren und "Auto Wiring" bedeutet, dass wir die Annotationen in die Java -Datei einfügen. Spring scannt dann automatisch den Stammkontext, in dem JavaKonfigurationsdatei erstellt wird es und steckte in die Tasche des Frühlings.

Hier ist die Detail-URI, unter der Sie weitere Informationen zu Beans erhalten haben

  • Spring Beans sind nur Objektinstanzen, die vom Container Spring IOC verwaltet werden.

  • Spring IOC Container tragen den Bag of Bean.Bean Erstellung, Pflege und Löschung liegen in der Verantwortung von Spring Container.

  • Wir können die Bohne durch Wiring und Auto Wiring in Spring setzen.

  • Unter Verdrahtung verstehen wir, dass wir es manuell in der XML-Datei konfigurieren.

  • Automatische Verkabelung bedeutet, dass wir die Anmerkungen in die Datei Java einfügen und Spring dann automatisch den Stammkontext scannt, in dem die Konfigurationsdatei Java enthalten ist.

5
maniBrock

Frühlingsbohnen sind Klassen. Anstatt eine Klasse zu instanziieren (mit new), erhalten Sie eine Instanz als bean, die aus dem Anwendungskontext in Ihren Klassentyp umgewandelt wird, wobei das Bean das ist, was Sie in der Anwendungskontextkonfiguration konfiguriert haben. Auf diese Weise behält die gesamte Anwendung die Instanz mit Singleton-Gültigkeitsbereich in der gesamten Anwendung bei. Alle Beans werden direkt nach der Instanziierung des Anwendungskontexts gemäß ihrer Konfigurationsreihenfolge initialisiert. Auch wenn Ihre Anwendung keine Beans enthält, werden alle Beans-Instanzen bereits in dem Moment erstellt, in dem Sie den Anwendungskontext erstellt haben.

4
Downhillski

In Spring werden die Objekte, die das Rückgrat Ihrer Anwendung bilden und vom Spring-IoC-Container verwaltet werden, als Beans bezeichnet. Eine Bean ist einfach ein Objekt, das von einem Spring-IoC-Container instanziiert, zusammengestellt und anderweitig verwaltet wird.

2
user3472473

Für den Frühling sind alle Objekte Bohnen! Der grundlegende Schritt im Spring Framework besteht darin, Ihre Objekte als Beans zu definieren. Beans sind nichts anderes als Objektinstanzen, die vom Spring-Framework anhand ihrer Klassendefinitionen erstellt werden. Diese Definitionen bilden im Wesentlichen die Konfigurationsmetadaten. Das Framework erstellt dann einen Plan, für den Objekte instanziiert werden müssen, für die Abhängigkeiten festgelegt und injiziert werden müssen, den Umfang der neu erstellten Instanz usw., basierend auf diesen Konfigurationsmetadaten.

Die Metadaten können wie im ersten Kapitel in einer einfachen XML-Datei bereitgestellt werden. Alternativ könnten die Metadaten als Annotation oder Java Configuration bereitgestellt werden.

Buch: Just Spring

Die XML-Konfiguration von Spring besteht aus Beans und Beans sind grundsätzlich Klassen. Es sind nur POJOs, die wir in unserem ApplicationContext verwenden. Das Definieren von Beans ersetzt das Schlüsselwort new. Also, wo immer Sie das Schlüsselwort new in Ihrer Anwendung verwenden, so etwas wie:

MyRepository myRepository =new MyRepository ();

Wo Sie dieses Schlüsselwort verwenden ne Hier können Sie nachsehen, wie Sie diese Konfiguration entfernen und in eine XML-Datei einfügen. Also werden wir wie folgt codieren:

<bean name="myRepository " 
      class="com.demo.repository.MyRepository " />

Jetzt können wir einfach Setter Injection/Constructor Injection verwenden. Ich benutze Setter Injection.

public class MyServiceImpl implements MyService {
    private MyRepository myRepository;
    public void setMyRepository(MyRepository myRepository)
        {
    this.myRepository = myRepository ;
        }
public List<Customer> findAll() {
        return myRepository.findAll();
    }
}
0
Wiqi