Was ist die richtige Methode zur Aktivierung der @PostConstruct über CommonAnnotationBeanPostProcessor von Java-Konfiguration?

Ich bin mit Spring 4 mit SpringBoot und Spring-Web mit Java-Konfiguration.

Meine @PostConstruct annotierten Methoden ausgeführt von Frühling zu starten, ist es notwendig sich zu registrieren CommonAnnotationBeanPostProcessor mit dem Kontext, der sonst @PostConstruct ignoriert.

In eine XML-basierte Spring-Konfiguration, die docs sagen, Sie zu benutzen (unter den Bohnen-element)

<context:annotation-config/>

Habe ich auch ein Beispiel gesehen, wo die Registrierung erfolgt auf einer einzelnen bean-basis, etwa so:

<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" />

Möchte ich vermeiden, wenn möglich. Mein Projekt enthält keine XML-Datei, und keiner ist, erzeugt für mich in meinem build-Ordner.

Derzeit ist meine Lösung, um kommentieren meiner Klasse mit @ComponentScan, die glaube ich, bewirkt, dass der Frühling zu erkennen und zu registrieren @Components und @Beans.
Irgendwie ist dieses Ursachen CommonAnnotationBeanPostProcessor aufgerufen werden, ich hab zwar keine Ahnung warum, aber es löst mein problem!

(Diese Klasse hat eine @Autowired Eigenschaft, die null am Start - daher die Notwendigkeit, führen Sie die Initialisierung über @PostConstruct)

Aber wieder meine Frage, was ist der richtige Weg, dies zu erreichen mit Hilfe der Java-Konfiguration? Danke!

Sie müssen sagen, der Kontext, die Sie verwenden möchten, kommentieren, entweder manuell durch registerig alle BeanPostProcessors (nicht empfohlen) oder durch die Verwendung <context:annotation-config /> (welche bereits implizit bei der Verwendung von <context:component-scan />. Oder mit einem ApplicationContext Implementierung, die standardmäßig verwendet Anmerkungen wie die AnnotationConfigApplicationContext. Es gibt keine einzige richtige Weg, es zu tun al den erwähnten Arten gültig sind.
Die Tatsache, dass Sie eine @Autowired Eigenschaft, die null sollte nicht der Fall sein, wie der Frühling sollte autowire. In der Regel bedeutet dies, dass Sie habe nicht gesagt, der Kontext, die Sie verwenden möchten annotation .
Deinum Danke. Um zu klären, die @Autowired Eigenschaft eingespritzt wird, aber der Wert ist noch nicht verfügbar zum Zeitpunkt der statischen/Instanz-Konstruktoren ausgeführt werden, daher ist der Einsatz von @PostConstruct. Der Rahmen ist bewusst etwas "Anmerkungen", (vielleicht über @SpringBootApplication, @Configuration und @Component welche ich verwende), aber docs Staat, der @PostConstruct ist nicht einer von Ihnen und so einige Weg, um zu gewinnen CommonAnnotationBeanPostProcessor benötigt wird. Ich möchte, dass die Art und Weise, um die Konsistenz mit Java-Konfiguration (ohne XML).
Die @PostConstruct ist schon verarbeitet, wenn Sie aktiviert haben, die annotation, das ist standardmäßig der Fall, wenn Sie die java-basierte Konfiguration.

InformationsquelleAutor zkn | 2015-12-08

Schreibe einen Kommentar