Jak programowo pobrać aktualną instancję SpringApplication w trybie wiosennego rozruchu? Jak mówią wiosny: SpringApplication ma metodę zwaną isWebEnvironment()
. Nie wiem, jak stwierdzić, czy aplikacja jest aplikacją webową lub inną niż programistyczna, czy mogę ją pobrać ApplicationContext.getEnvironment()
? Przy okazji, nie chcę tego rozwiązywać, szukając xxServlet
lubić HttpServletRequest
... itd.
Odpowiedzi:
0 dla odpowiedzi № 1Co powiesz na applicationContext instanceof WebApplicationContext
?
Jeśli próbujesz po prostu określić, czy twoja aplikacja działa w kontekście sieciowym, możesz użyć faktu, że gdy aplikacja Spring zostanie uruchomiona w kontekście sieciowym, ApplicationContext
obiekt, do którego masz dostęp, jest instancją programu WebApplicationContext
berło. Dlatego możesz po prostu pisać
isWebEnvironment = (applicationContext instanceof WebApplicationContext);
Nie ma prawdziwego powodu, aby zdobyć SpringApplication
obiekt ze swojej klasy, ponieważ jego jedynym celem jest zbudowanie ApplicationContext
.
0 dla odpowiedzi nr 2
Jeśli używasz Spring Boot
możesz użyć tego:
String[] springBootAppBeanName = applicationContext.getBeanNamesForAnnotation(org.springframework.boot.autoconfigure.SpringBootApplication.class);
applicationContext.getBean(springBootAppBeanName[0]);
Spowoduje to odtworzenie nazw fasoli sprężynowej, do których przypisano adnotacje @SpringBootApplication
, po otrzymaniu ich możesz łatwo uzyskać instancję po imieniu.