Nedávno som narazil na túto poznámku v @PostConstruct firemného projektu a bol som zmätený.
Revízia:
Po konzultácii je zhrnutie nasledovné:
1. Od špecifikácie Java EE5 sa používajú dve anotácie, ktoré ovplyvňujú životný cyklus servletu, @PostConstruct a @PreDestroy, na úpravu nestatickej metódy void(). Existujú dva spôsoby, ako to napísať:
@PostConstruct
public void someMethod(){}
alebo
public @PostConstruct void someMethod(){}
Metóda @PostConstruct modified sa spustí, keď server načíta servlet, aServer ho vykoná len raz。 PostConstruct sa vykonáva po konštruktore a pred metódou init(). Metóda PreDestroy() sa vykonáva po tom, čo metóda destroy() je intelektuálna
Okrem toho sa na jar udeľuje poradie Konstruktor, @Autowired a @PostConstruct
V skutočnosti z doslovného významu injekcie závislostí vieme, že na injekciu objektu p do objektu A musia byť najprv vygenerované objekty A a objekt p, aby mohla byť injekcia vykonaná. Ak je teda členová premenná p anotovaná @Autowried triedy A, potom @Autowired injekcia nastáva po vykonaní konštrukčnej metódy A.
Ak chcete vykonať niektoré inicializačné operácie pri generovaní objektu a tieto inicializačné operácie závisia od dependency injection, potom to v konštruktore nemôžete urobiť. Na to môžete použiť metódu @PostConstruct anotácií na dokončenie inicializácie, @PostConstruct anotované metódy budú automaticky volané po dokončení injekcie závislostí.
Konštruktor >> @Autowired >> @PostConstruct
Príklad:
|