Как да получите актуален SpringApplication екземпляр в пролет-обувка програмно? Както казва пролетната документация: SpringApplication има метод, наречен isWebEnvironment()
, Не знам как да разбера дали дадено приложение е уеб или не-уеб приложение, което мога да получа от него ApplicationContext.getEnvironment()
? Между другото, аз не искам да реша това чрез търсене xxServlet
като HttpServletRequest
... и т.н.
Отговори:
0 за отговор № 1Какво относно applicationContext instanceof WebApplicationContext
?
Ако се опитвате просто да определите дали приложението ви се изпълнява в уеб контекст, тогава можете да използвате факта, че когато приложението Spring се стартира в уеб контекст ApplicationContext
обектът, до който имате достъп, е инстанция на WebApplicationContext
интерфейс. Затова можете просто да пишете
isWebEnvironment = (applicationContext instanceof WebApplicationContext);
Няма реална причина да се получи SpringApplication
обект от вашия клас, като единствената му цел е да изгради ApplicationContext
.
0 за отговор № 2
Ако използвате Spring Boot
можете да използвате това:
String[] springBootAppBeanName = applicationContext.getBeanNamesForAnnotation(org.springframework.boot.autoconfigure.SpringBootApplication.class);
applicationContext.getBean(springBootAppBeanName[0]);
Това ще извлече имената на пролетни боб, с които са анотирани @SpringBootApplication
, след като ги получите можете просто да получите инстанцията с неговото име.