Ich konvertiere einen Controller in die neuere Annotation-Version. In der alten Version habe ich die init-Methode in springmvc-servlet.xml mit folgenden Angaben angegeben:
<beans>
<bean id="myBean" class="..." init-method="init"/>
</beans>
Wie kann ich die init-Methode mithilfe der Anmerkungsversion angeben?
java
spring
annotations
controller
Krt_Malta
quelle
quelle
Antworten:
Sie können verwenden
quelle
Alternativ können Sie Ihre Klasse die
InitializingBean
Schnittstelle implementieren lassen, um eine Rückruffunktion (afterPropertiesSet()
) bereitzustellen, die der ApplicationContext beim Erstellen der Bean aufruft.quelle
Es gibt verschiedene Möglichkeiten, den Initialisierungsprozess im Frühjahr abzufangen. Wenn Sie alle Beans initialisieren und automatisch verdrahten / injizieren müssen, gibt es mindestens zwei Möglichkeiten, die ich kenne, um dies sicherzustellen. Ich habe nur den zweiten getestet, aber ich glaube, dass beide gleich funktionieren.
Wenn Sie @Bean verwenden, können Sie mit initMethod wie folgt referenzieren.
Wenn Sie @Component verwenden, können Sie mit @EventListener wie folgt kommentieren.
In meinem Fall habe ich ein Legacy-System, in dem ich jetzt IoC / DI verwende, wobei Spring Boot das ausgewählte Framework ist. Das alte System bringt viele zirkuläre Abhängigkeiten in die Tabelle und ich muss daher viel Setter-Abhängigkeit verwenden. Das bereitete mir einige Kopfschmerzen, da ich @PostConstruct nicht vertrauen konnte, da die automatische Verdrahtung / Injektion durch den Setter noch nicht durchgeführt wurde. Die Reihenfolge ist Konstruktor, @PostConstruct und dann automatisch verdrahtete Setter. Ich habe es mit der Annotation @EventListener gelöst, die zuletzt und zur "gleichen" Zeit für alle Beans ausgeführt wird. Das Beispiel zeigt auch die Implementierung von InitializingBean.
Ich habe zwei Klassen (@Component) mit Abhängigkeit voneinander. Die Klassen sehen für den Zweck dieses Beispiels gleich aus und zeigen nur eine davon an.
Dies ist die Protokollausgabe, die die Reihenfolge der Aufrufe beim Start des Containers anzeigt.
Wie Sie sehen, wird @EventListener zuletzt ausgeführt, nachdem alles fertig und konfiguriert ist.
quelle
quelle