Frage

Ich habe einen Anwendungsfall, wo ich an der Application Last bis nur einmal eine (nicht statisch) Methode in der Bean aufrufen müssen. Ist es in Ordnung, wenn ich MethodInvokingFactoryBean für diesen Einsatz? Oder wir haben eine etwas bessere Lösung?

Als Randbemerkung, ich benutze ConfigContextLoaderListener den Anwendungskontext in Web-Anwendung zu laden. Und will, dass, wenn Bohne ‚A‘ instanziiert wird nur nennen methodA () einmal.

Wie kann das schön gemacht werden?

War es hilfreich?

Lösung

Sie können mit so etwas wie:

<beans>
    <bean id="myBean" class="..." init-method="init"/>
</beans>

Dies wird die „init“ -Methode aufrufen, wenn die Bohne instanziiert wird.

Andere Tipps

auf dem @PostConstruct Vorschlag in anderen Antworten zu erweitern, das ist wirklich die beste Lösung, meiner Meinung nach.

  • Es hält Ihren Code aus dem Frühjahr API entkoppelt (@PostConstruct ist in javax. *)
  • Es annotiert explizit Ihre init-Methode als etwas, das die Bohne
  • initialisieren aufgerufen werden muss
  • Sie müssen nicht daran denken, die init-Methode Attribut auf Ihre Spring-Bean-Definition hinzufügen, Frühling wird das Verfahren automatisch aufrufen (vorausgesetzt, Sie die Annotation-config Option irgendwo anders im Kontext registrieren, sowieso).

Es gibt drei verschiedene Ansätze zu berücksichtigen, wie in der Referenz

Verwenden Sie init-Methode Attribut

Pros:

  • Ist nicht Bean erfordern eine Schnittstelle zu implementieren.

Nachteile:

  • Keine sofortige Anzeige dieses Verfahren nach dem Bau erforderlich ist, die Bohne, um sicherzustellen, richtig konfiguriert ist.

Implement InitializingBean

Pros:

  • Keine Notwendigkeit init-Methode, um anzugeben, oder schalten Sie auf die Komponente Scannen / Anmerkung Verarbeitung.
  • Geeignet für Bohnen mit einer Bibliothek geliefert, wo wir mit Bohnen Lifecycle nicht die Anwendung mit dieser Bibliothek wollen uns betreffen.

Nachteile:

  • Mehr invasiv als die init-Methode Ansatz.

Mit JSR-250 @ PostConstruct lifecyle Anmerkung

Pros:

  • Nützlich, wenn Komponente Scannen mit Bohnen automatisch zu erkennen.
  • macht deutlich, dass eine spezifische Methode ist für die Initialisierung verwendet werden. Absicht ist, näher an den Code.

Nachteile:

  • Initialisierung nicht mehr zentral festgelegt in der Konfiguration.
  • Sie dürfen nicht vergessen, auf Anmerkung Verarbeitung drehen (die manchmal vergessen werden kann)

Haben Sie versucht, die Umsetzung

Sie können eine benutzerdefinierte bereitstellen BeanPostProcessor in Ihrem Anwendungskontext, es zu tun. Oder wenn Sie nichts dagegen haben, eine Feder-Schnittstelle in Ihrem Bean Implementierung, könnten Sie die InitializingBean Schnittstelle oder die "init-Methode" Richtlinie (gleicher Link).

Um eine Verwechslung klar über die zwei Ansatz d.h Verwendung von

  1. @PostConstruct und
  2. init-method="init"

Aus persönlicher Erfahrung, erkannte ich, dass die Verwendung von (1) funktioniert nur in einem Servlet-Container, während (2) in jeder Umgebung funktioniert, auch in Desktop-Anwendungen. So würden, wenn Sie Frühling in einer Standalone-Anwendung verwenden, würden Sie verwenden müssen (2) durchzuführen, dass „rufen Sie diese Methode nach der Initialisierung.

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