Nedávno jsem na tuto poznámku narazil v @PostConstruct firemního projektu a byl jsem zmatený.
Přezkoumání:
Po konzultaci je shrnutí následující:
1. Od specifikace Java EE5 se používají dvě anotace, které ovlivňují životní cyklus servletu, @PostConstruct a @PreDestroy, k úpravě metody nestatického void(). Existují dva způsoby, jak to napsat:
@PostConstruct
public void someMethod(){}
nebo
public @PostConstruct void someMethod(){}
Metoda @PostConstruct modified běží, když server načte servlet, aServer to vykoná pouze jednou。 PostConstruct se provádí po konstruktoru a před metodou init(). Metoda PreDestroy() se provádí po metodě destroy() je intelektuální
Kromě toho na jaře byl uveden řád konstruktérů, @Autowired a @PostConstruct
Ve skutečnosti z doslovného významu injekce závislostí víme, že k injekci objektu p do objektu A musí být nejprve vygenerovány objekty A a objekt p, než může být injekce provedena. Pokud je tedy proměnná člena p anotována @Autowried třídy A, pak @Autowired injekce nastává až po provedení konstrukční metody A.
Pokud chcete při generování objektu dokončit inicializační operace a tyto operace závisí na dependency injection, pak to ve konstruktoru nemůžete provést. K tomu můžete použít metodu @PostConstruct anotace k dokončení inicializace, @PostConstruct anotované metody budou automaticky volány po dokončení injekce závislostí.
Konstruktor >> @Autowired >> @PostConstruct
Příklad:
|