Spróbuj zmienić ją
@PostConstruct
void init() {
(tj void
zamiast def
). Nie jestem pewien, czy Spring wyraźnie to wymusza, ale specification of @PostConstruct
stwierdza, że między innymi "Typ zwrotu metody MUSI być nieważny".
Edycja: komentarz uchamp jest poprawny, właśnie wypróbowałem ten sam test i rzeczywiście metoda o adnotacji @PostConstruct
jest wywoływana tylko przy pierwszym użyciu komponentu Service bean i niekoniecznie natychmiast po uruchomieniu. Możesz dodać klasę usługi do klasy usługi, aby wymusić jej inicjalizację przy uruchomieniu. Wygląda na to, że nie jest to udokumentowane w podręczniku użytkownika, wydedukowałem go przez reading the code.
Należy zauważyć, że "użyty" w poprzednim paragrafie niekoniecznie oznacza, że należy wywołać na nim metodę. Element bean usługi zostanie zainicjowany po raz pierwszy, gdy zostanie pobrany z kontekstu aplikacji, bezpośrednio lub z powodu automatycznego automareducji do innego inicjalizowanego komponentu bean. Na przykład wstrzykiwanie usługę do Bootstrap użyciu
def emailJobSchedulerService
wystarczy, by odpalić metodę @PostConstruct
, nie trzeba rzeczywiście wywołać dowolną z metod usługa jest z zamknięciem BootStrap.init
. Podobnie, gdyby twoja usługa została wstrzyknięta do któregokolwiek kontrolera, to init uruchomiłby się po raz pierwszy, gdy jeden z tych kontrolerów obsłużyłby żądanie (każde żądanie, to nie musi być działanie, które wywołuje usługę).
Adnotacja wdrożyć wiele ograniczeń (patrz http://docs.oracle.com/javase/7/docs/api/javax/annotation/PostConstruct.html). Czy one wszystkie mają zastosowanie? – lucke84
@ lucke84 Po zmianie, aby anulować zgodnie z sugestią Iana, powinienem przestrzegać wszystkich ograniczeń. – willcodejavaforfood
Kiedy należy się spodziewać wydrukowania cronExpression? Na początku serwera? Wydaje mi się, że jest to wywoływane, gdy wykonywane jest pierwsze wywołanie dowolnej z metod usługi, a nie podczas uruchamiania serwera. Sugeruję wywołanie metody dummy w bootstrapie tylko w celu potwierdzenia. – uchamp