Wie kann ich die aktuelle SpringApplication-Instanz programmgesteuert im Spring-Boot abrufen? Wie der Frühling sagt: SpringApplication hat eine Methode, die aufgerufen wird isWebEnvironment()
. Ich weiß nicht, wie ich programmgesteuert feststellen kann, ob es sich bei einer Anwendung um eine Web- oder Nicht-Webanwendung handelt ApplicationContext.getEnvironment()
? Übrigens möchte ich das nicht durch Suchen lösen xxServlet
mögen HttpServletRequest
... etc.
Antworten:
0 für die Antwort № 1Wie wäre es mit applicationContext instanceof WebApplicationContext
?
Wenn Sie einfach feststellen möchten, ob Ihre Anwendung in einem Webkontext ausgeführt wird, können Sie die Tatsache verwenden, dass beim Start einer Spring - Anwendung in einem Webkontext die ApplicationContext
Objekt, auf das Sie Zugriff haben, ist eine Instanz von WebApplicationContext
Schnittstelle. Deshalb kannst du einfach schreiben
isWebEnvironment = (applicationContext instanceof WebApplicationContext);
Es gibt keinen Grund, das zu bekommen SpringApplication
Objekt aus Ihrer Klasse, da der einzige Zweck darin besteht, ein ApplicationContext
.
0 für die Antwort № 2
Wenn Sie verwenden Spring Boot
Sie können dies verwenden:
String[] springBootAppBeanName = applicationContext.getBeanNamesForAnnotation(org.springframework.boot.autoconfigure.SpringBootApplication.class);
applicationContext.getBean(springBootAppBeanName[0]);
Dadurch werden die Namen der Spring Beans abgerufen @SpringBootApplication
Nachdem Sie sie erhalten haben, können Sie die Instanz einfach anhand ihres Namens erhalten.