Ich muss noch eine allgemeine Definition von Frühlingsbohnen finden, die ich verstehen kann. Ich sehe sie oft in Grails Dokumentation und Büchern erwähnt, aber ich denke, dass es von Vorteil wäre, zu verstehen, was sie sind. Was sind Frühlingsbohnen? Wie können sie verwendet werden? Haben sie etwas mit Abhängigkeitsinjektion zu tun?
397
Antworten:
Weitere Informationen zu Beans und Scope von SpringSource :
* IoC: Inversion der Kontrolle
quelle
@Autowired
? Oder einfach wenn ich meinimport
s mache ?Spring Beans sind nur Instanzobjekte, die vom Spring-Container verwaltet werden. Sie werden vom Framework erstellt und verkabelt und in einen "Beutel mit Objekten" (den Container) gestellt, von dem Sie sie später abrufen können.
Der "Verkabelungsteil" dort ist, worum es bei der Abhängigkeitsinjektion geht. Das bedeutet, dass Sie einfach "Ich werde dieses Ding brauchen" sagen können und das Framework einige Regeln befolgt, um die richtige Instanz zu erhalten.
Für jemanden, der nicht an Spring gewöhnt ist, hat der Artikel von Wikipedia Spring eine schöne Beschreibung :
quelle
Lassen Sie uns zuerst den Frühling verstehen:
Der Frühling ist ein leichtes und flexibles Gerüst.
Analogie:
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) kultiviert wird. Hier ist Farmer Spring Framework, Ackerland Spring Container, Bohnen Spring Beans, Kultivierung Spring Processors.
Wie der Bohnenlebenszyklus haben auch die Frühlingsbohnen einen eigenen Lebenszyklus.
img Quelle
Es folgt die Abfolge 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, die in der Bean-Definition angegeben sind.
Bean-Name festlegen: Wenn die Bean implementiert wird
BeanNameAware
Schnittstelle , übergibt spring die ID der Bean an diesetBeanName()
Methode.Bean Factory
BeanFactoryAware
einstellen : Wenn Bean die Schnittstelle implementiert , übergibt Spring die Beanfactory ansetBeanFactory()
Methode.Vorinitialisierung: Wird auch als Nachbearbeitung von Bean bezeichnet. Wenn der Bean Bean BeanPostProcessors zugeordnet sind, ruft Spring auf
postProcesserBeforeInitialization()
Methode auf.Beans initialisieren: Wenn die Beans implementiert wird
IntializingBean
, ist esafterPropertySet()
Methode aufgerufen. Wenn die Bean über eine Deklaration der Init-Methode verfügt, wird die angegebene Initialisierungsmethode aufgerufen.Nachinitialisierung: - Wenn
BeanPostProcessors
der Bean etwas zugeordnet ist, wird derenpostProcessAfterInitialization()
Methoden aufgerufen.Gebrauchsfertig: Jetzt kann die Bean von der Anwendung verwendet werden
Zerstören: Wenn die Bean implementiert wird
DisposableBean
, wird diedestroy()
Methode aufgerufenquelle
Nun, du hast es teilweise verstanden. Sie müssen die Bohnen nach Ihren Bedürfnissen anpassen und Spring Container informieren, um sie bei Bedarf zu verwalten, indem Sie eine von Martin Fowler geprägte Methode namens IoC ( Inversion of Control ) verwenden , die auch als Dependency Injection bezeichnet wird (DI) bezeichnet wird.
Sie verdrahten die Beans so, dass Sie sich nicht um die Instanziierung kümmern oder eine Abhängigkeit von der Bean auswerten 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. :) :)
quelle
Frühling haben den IoC-Behälter, der den Beutel der Bohne trägt; Die Pflege und Löschung der Erstellung liegt in der Verantwortung von Spring Container. Wir können die Bohne durch Verkabelung und automatische Verkabelung in den Frühling bringen. Wiring bedeutet, dass wir es manuell in der XML-Datei konfigurieren und "Auto Wiring" bedeutet, dass wir die Anmerkungen in die Java-Datei einfügen. Spring scannt dann automatisch den Root-Kontext, in dem sich die Java-Konfigurationsdatei befindet, erstellt sie und legt sie in die Tasche von Spring.
Hier ist die Detail-URI, in der Sie weitere Informationen zu Bohnen erhalten haben
quelle
Frühlingsbohnen sind Klassen. Anstatt eine Klasse zu instanziieren (mit
new
), erhalten Sie eine Instanz alsbean
Umwandlung in Ihren Klassentyp aus dem Anwendungskontext, wobei die Bean das ist, was Sie in der Anwendungskontextkonfiguration konfiguriert haben. Auf diese Weise verwaltet die gesamte Anwendung die Singleton-Scope-Instanz in der gesamten Anwendung. Alle Beans werden direkt nach der Instanziierung des Anwendungskontexts in 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.quelle
Spring Beans sind nur Objektinstanzen, die vom Spring IOC-Container verwaltet werden.
Spring IOC-Container tragen den Beutel mit Bohnen. Das Erstellen, Verwalten und Löschen von Bohnen liegt in der Verantwortung von Spring Container.
Wir können die Bohne durch Verkabelung und automatische Verkabelung in den Frühling bringen.
Verkabelung bedeutet, dass wir es manuell in der XML-Datei konfigurieren.
Auto Wiring bedeutet, dass wir die Anmerkungen in die Java-Datei einfügen und Spring dann automatisch den Root-Kontext scannt, in dem sich die Java-Konfigurationsdatei befindet, sie erstellt und in die Tasche von Spring legt.
quelle
Eine Bean ist ein POJO (Plain Old Java Object), das vom Spring Container verwaltet wird.
Spring-Container erstellen standardmäßig nur eine Instanz der Bean. Diese Bean wird im Speicher zwischengespeichert, sodass alle Anforderungen für die Bean einen gemeinsamen Verweis auf dieselbe Bean zurückgeben.
Die Annotation @Bean gibt ein Objekt zurück, das Spring im Anwendungskontext als Bean registriert. Die Logik innerhalb der Methode ist für die Erstellung der Instanz verantwortlich.
Wann verwenden wir die @ Bean-Annotation?
Wenn die automatische Konfiguration keine Option ist. Zum Beispiel, wenn wir Komponenten aus einer Bibliothek eines Drittanbieters verkabeln möchten, weil der Quellcode nicht verfügbar ist und wir die Klassen nicht mit @Component kommentieren können.
Ein Echtzeitszenario könnte sein, dass jemand eine Verbindung zum Amazon S3-Bucket herstellen möchte. Da die Quelle nicht verfügbar ist, müsste er eine @bean erstellen.
Quelle für den obigen Code -> https://www.devglan.com/spring-mvc/aws-s3-java
Weil ich oben @Component Annotation erwähnt habe.
@Component Gibt an, dass eine mit Anmerkungen versehene Klasse eine "Komponente" ist. Solche Klassen werden als Kandidaten für die automatische Erkennung angesehen, wenn annotationsbasierte Konfiguration und Klassenpfad-Scan verwendet werden.
Die Komponentenanmerkung registriert die Klasse als einzelne Bean.
quelle
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.
quelle
Buch: Nur Frühling
quelle
Die XML-Konfiguration von Spring besteht aus Beans und Beans sind im Grunde Klassen. Es sind nur POJOs, die wir in unserem ApplicationContext verwenden. Das Definieren von Beans kann als Ersatz für das Schlüsselwort new angesehen werden. Wo immer Sie das Schlüsselwort new in Ihrer Anwendung verwenden, etwa:
Wenn Sie dieses neue Schlüsselwort verwenden , können Sie diese Konfiguration entfernen und in eine XML-Datei einfügen. Also werden wir so codieren:
Jetzt können wir einfach Setter Injection / Constructor Injection verwenden. Ich benutze Setter Injection.
quelle