Verschwenden Sie viele nicht verwendete Bohnen in einem Federbohnenkontext bedeutende Ressourcen?

StackOverflow https://stackoverflow.com/questions/98320

  •  01-07-2019
  •  | 
  •  

Frage

Meine Modellschicht wird von einer Handvoll verschiedener Projekte verwendet, und ich möchte eine einzelne XML -Spring -Konfigurationsdatei für das Modell verwenden, unabhängig davon, welches Projekt sie verwendet.

Meine Frage lautet: Da nicht alle Bohnen in allen Projekten verwendet werden, verschwende ich Ressourcen für einen erheblichen Betrag, wenn nicht so instanziiert wird? Ich bin mir nicht sicher, wie fauler Frühling darum geht, sie zu laden, da es bis jetzt noch nie ein Problem war.

Irgendwelche Ideen?

War es hilfreich?

Lösung

Aus dem entnommen Federreferenzhandbuch:

Das Standardverhalten für ApplicationContext-Implementierungen besteht darin, alle Singleton-Bohnen beim Start-up eifrig zu präsentieren. Vorinstantiation bedeutet, dass ein ApplicationContext alle seine Singleton-Bohnen im Rahmen seines Initialisierungsprozesses eifrig erstellt und konfigurieren wird. Im Allgemeinen ist dies eine gute Sache, da dies bedeutet, dass alle Fehler in der Konfiguration oder in der Umgebung sofort entdeckt werden (im Gegensatz zu möglicherweise Stunden oder sogar Tagen unten).

Es gibt jedoch Zeiten, in denen dieses Verhalten nicht das ist, was gewünscht wird. Wenn Sie nicht möchten, dass eine Singleton-Bean bei Verwendung eines ApplicationContext vorinstantiert wird, können Sie dies selektiv steuern, indem Sie eine Bean-Definition als faul initialisiert markieren. Eine faul initialisierte Bohne zeigt dem IOC-Container an, ob eine Bean-Instanz beim Start erstellt werden sollte oder wann er zum ersten Mal angefordert wird.

Bei der Konfiguration von Bohnen über XML wird dieses faule Laden durch das Attribut "Lazy-Init" auf dem [Bean-Element] gesteuert. zum Beispiel:

<bean id="lazy" class="com.foo.ExpensiveToCreateBean" lazy-init="true"/>

Wenn Ihre Beans nicht Ressourcen wie Dateisperrungen oder Datenbankverbindungen verwenden, würde ich mich nicht zu sehr um einfachen Speicheraufwand kümmern, wenn Sie diese eine Konfiguration für mehrere (aber unterschiedliche) Profile leichter haben können.

Andere Tipps

Zusätzlich zu den anderen Kommentaren: Es ist auch möglich, eine ganze Konfigurationsdatei anzugeben, die träge initialisiert werden soll, indem Sie das Attribut "Standard-Lazy-Init" auf dem verwenden <beans/> Element; zum Beispiel:

<beans default-lazy-init="true">
    <!-- no beans will be pre-instantiated... -->
</beans>

Dies ist viel einfacher als das Hinzufügen des lazy-init Zeug zu jeder Bohne, wenn Sie viele von ihnen haben.

Standardmäßig sind Frühlingsbohnen Singletons und werden so instanziiert, dass der Anwendungskontext erstellt wird (beim Start). Angenommen, Sie haben das Standardverhalten nicht außer Kraft gesetzt, wird eine einzige Instanz jeder Bean erstellt.

Hängt von den Objekten ab.

Der unbenutzte Code ist jedoch "Cruft" und erhöht die Wartungskosten.

Besser die Schiedsrichter und Klassen löschen. Sie können immer von der Versionskontrolle wiederherstellen, wenn sie später benötigt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top