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.
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:
prototype
, request
oder session
), wobei das scope="xyz"
-Attribut 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.
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.
Tags und Links java spring dependency-injection