Wann erstellt Spring Instanzen von Objekten, die injiziert werden

8

Spring erstellt DI und erstellt Objekte, sodass Ihr Programm sich keine Sorgen um das Erstellen von Objekten machen muss. Aber die Frage ist hier, wenn eine Instanz des injizierten Objekts erstellt wird. Wenn das Hauptprogramm die Instanz verwendet oder wenn eine Instanz des Hauptprogramms erstellt wird.

    
Eager Learner 18.01.2010, 08:13
quelle

3 Antworten

12

Alle Beans im Kontext werden beim Start des Kontexts instanziiert, injiziert und initialisiert. Zu dem Zeitpunkt, zu dem die erste Bean aus dem Kontext abgerufen wurde, können alle Beans verwendet werden.

Es gibt zwei Dinge, die verhindern können, dass eine Bean beim Kontextstart initialisiert wird:

  • Eine Bean hat eine Bean mit einem anderen Bereich konfiguriert (z. B. prototype , request oder session ), wobei das scope="xyz" -Attribut
  • verwendet wird
  • Eine Bean wurde mit % markiert. co_de% , in diesem Fall wird es nur instanziiert, wenn es explizit angefordert wird oder wenn es als Abhängigkeit von einer anderen Bean benötigt wird.
skaffman 18.01.2010, 08:15
quelle
4

In einem Kommentar schreibt das OP:

  

Es liegt also am Programmierer zu entscheiden, ob eine Bean im Voraus initialisiert oder initialisiert werden muss. Dies könnte sehr subjektiv sein, aber können Sie mich über Best Practices in dieser Art von Situationen informieren.

Ja, es liegt am Programmierer (oder Systemintegrator) zu entscheiden.

Es gibt wirklich keine Best-Practice-Regeln für die Entscheidung. Denken Sie so:

  • Wenn Sie eine Bean als langsam initialisiert deklarieren, wenn sie immer instanziiert werden muss, wird der Startvorgang möglicherweise langsamer.

  • Wenn Sie eine Bean als eifrig initialisieren, wenn sie nicht immer benötigt wird, werden Sie den Startvorgang verlangsamen und möglicherweise mehr Speicher verwenden. Im schlimmsten Fall kann das Erstellen der unnötigen Bean sogar dazu führen, dass der Start fehlschlägt.

Kurz gesagt, Sie müssen Ihre Anwendung verstehen.

    
Stephen C 18.01.2010 10:10
quelle
2

Ссылка

  

Standardmäßig erstellen und konfigurieren ApplicationContext-Implementierungen eifrig alle Singleton-Beans als Teil des Initialisierungsprozesses. Im Allgemeinen ist diese Vorinstanziierung wünschenswert, da Fehler in der Konfiguration oder der Umgebung unmittelbar im Gegensatz zu Stunden oder sogar Tagen entdeckt werden. Wenn dieses Verhalten nicht erwünscht ist, können Sie die Vorinstanziierung einer Singleton-Bean verhindern, indem Sie die Bean-Definition als "lazy-initialized" markieren. Eine Lazy-initialisierte Bean weist den IoC-Container an, eine Bean-Instanz zu erstellen, wenn sie zum ersten Mal angefordert wird und nicht beim Start.

    
nanda 18.01.2010 08:17
quelle