Studiuję do uzyskania certyfikatu Spring Core i mam pewne wątpliwości co do tego, jak Spring radzi sobie z cyklem życia ziaren, aw szczególności z postprocesorem fasoli .
Więc mam taki schemat:
Jest dla mnie całkiem jasne, co to oznacza:
W fazie ładowania definicji komponentów bean wykonywane są następujące kroki :
W @Configuration zajęcia są przetwarzane i / lub @Components są skanowane pod kątem i / lub pliki XML są analizowane.
Definicje Bean dodane do BeanFactory (każda zindeksowana pod swoim identyfikatorem)
Wywołana specjalna fasola BeanFactoryPostProcessor może zmodyfikować definicję dowolnego komponentu bean (na przykład w celu zastąpienia wartości zastępczej właściwości).
Następnie w fazie tworzenia fasoli mają miejsce następujące kroki :
Każda fasola jest domyślnie tworzona z niecierpliwością (tworzona we właściwej kolejności z wstrzykniętymi zależnościami).
Po wstrzyknięciu zależności każde ziarno przechodzi przez fazę przetwarzania końcowego, w której może nastąpić dalsza konfiguracja i inicjalizacja.
Po przetworzeniu końcowym ziarno jest w pełni zainicjowane i gotowe do użycia (śledzone przez jego identyfikator, aż do zniszczenia kontekstu)
Ok, jest to dla mnie całkiem jasne i wiem też, że istnieją dwa typy postprocesorów fasoli :
Inicjalizatory: Inicjalizacja fasoli jeśli polecił (tj @PostConstruct).
i Cała reszta: pozwala na dodatkową konfigurację i może działać przed lub po kroku inicjalizacji
I publikuję ten slajd:
Więc jest dla mnie bardzo jasne, co inicjalizatory bean postprocesorów (są to metody z adnotacją @PostContruct i które są automatycznie wywoływane natychmiast po metodach ustawiających (czyli po wstrzyknięciu zależności) i wiem, że mogę użyć do wykonać partię inicjalizacyjną (zapełnij pamięć podręczną, jak w poprzednim przykładzie).
Ale co dokładnie reprezentuje drugi postprocesor fasoli? Co mamy na myśli, gdy mówimy, że te kroki są wykonywane przed lub po fazie inicjalizacji ?
Więc moje ziarna są tworzone, a ich zależności są wstrzykiwane, więc faza inicjalizacji jest zakończona (przez wykonanie metody z adnotacjami @PostContruct ). Co mamy na myśli, mówiąc, że postprocesor Bean jest używany przed fazą inicjalizacji? Oznacza to, że dzieje się to przed wykonaniem metody z adnotacjami @PostContruct ? Czy to oznacza, że może się to zdarzyć przed wstrzyknięciem zależności (przed wywołaniem metod ustawiających)?
A co dokładnie mamy na myśli, gdy mówimy, że jest to wykonywane po kroku inicjalizacji . Oznacza to, że dzieje się to po wykonaniu metody z adnotacjami @PostContruct , czy co?
Mogę łatwo zrozumieć, dlaczego potrzebuję metody z adnotacjami @PostContruct , ale nie mogę znaleźć typowego przykładu innego rodzaju postprocesora fasoli, czy możesz mi pokazać typowy przykład kiedy są używane?