Konwertuję kontroler na nowszą wersję adnotacji. W starej wersji użyłem metody init w springmvc-servlet.xml używając:
<beans>
<bean id="myBean" class="..." init-method="init"/>
</beans>
Jak mogę określić metodę init przy użyciu wersji adnotacji?
java
spring
annotations
controller
Krt_Malta
źródło
źródło
Odpowiedzi:
Możesz użyć
źródło
Alternatywnie możesz mieć swoją klasę zaimplementowaną w
InitializingBean
interfejsie w celu zapewnienia funkcji zwrotnej (afterPropertiesSet()
), którą ApplicationContext będzie wywoływać podczas konstruowania komponentu bean.źródło
Wiosną proces inicjalizacji można przechwycić na kilka sposobów. Jeśli musisz zainicjować wszystkie ziarna i automatycznie je podłączyć / wstrzyknąć, są co najmniej dwa znane mi sposoby, które to zapewnią. Testowałem tylko drugi, ale wierzę, że oba działają tak samo.
Jeśli używasz @Bean, możesz odwoływać się przez initMethod, w ten sposób.
Jeśli używasz @Component, możesz dodawać adnotacje za pomocą @EventListener w ten sposób.
W moim przypadku mam starszy system, w którym teraz używam IoC / DI, gdzie Spring Boot jest wybranym frameworkiem. Stary system wprowadza wiele zależności cyklicznych do tabeli, dlatego muszę często używać zależności ustawiających. To przyprawiło mnie o ból głowy, ponieważ nie mogłem zaufać @PostConstruct, ponieważ automatyczne podłączanie / wstrzykiwanie przez setter nie zostało jeszcze wykonane. Kolejność to konstruktor, @PostConstruct, a następnie autowired setters. Rozwiązałem to za pomocą adnotacji @EventListener, która będzie działać jako ostatnia i „w tym samym” czasie dla wszystkich fasoli. Przykład pokazuje również implementację InitializingBean.
Mam dwie klasy (@Component) z zależnościami od siebie. Klasy wyglądają tak samo na potrzeby tego przykładu, wyświetlając tylko jedną z nich.
To jest dane wyjściowe dziennika przedstawiające kolejność wywołań podczas uruchamiania kontenera.
Jak widać, @EventListener jest uruchamiane jako ostatnie, gdy wszystko jest gotowe i skonfigurowane.
źródło
źródło