Wie bekomme ich alle frühlingsverwalteten Bohnen?

1. Übersicht

In diesem Artikel werden verschiedene Techniken zum Anzeigen aller von Spring verwalteten Beans mit dem Container untersucht.

2. Der IoC-Container

Eine Bean ist die Grundlage einer von Spring verwalteten Anwendung. Alle Bohnen befinden sich im IOC-Container, der für die Verwaltung ihres Lebenszyklus verantwortlich ist.

Wir können eine Liste aller Bohnen in diesem Container auf zwei Arten erhalten:

  1. Verwenden einer ListableBeanFactory- Schnittstelle
  2. Verwenden eines Spring Boot-Aktuators

3. Verwenden der ListableBeanFactory- Schnittstelle

Die ListableBeanFactory- Schnittstelle bietet die Methode getBeanDefinitionNames () , die die Namen aller in dieser Factory definierten Beans zurückgibt. Diese Schnittstelle wird von allen Bean-Fabriken implementiert, die ihre Bean-Definitionen vorab laden, um alle ihre Bean-Instanzen aufzulisten.

Die Liste aller bekannten Subschnittstellen und ihrer implementierenden Klassen finden Sie in der offiziellen Dokumentation.

In diesem Beispiel verwenden wir eine Spring Boot-Anwendung.

Zuerst erstellen wir einige Frühlingsbohnen. Erstellen wir einen einfachen Spring Controller FooController :

@Controller public class FooController { @Autowired private FooService fooService; @RequestMapping(value="/displayallbeans") public String getHeaderAndBody(Map model){ model.put("header", fooService.getHeader()); model.put("message", fooService.getBody()); return "displayallbeans"; } }

Dieser Controller ist von einem anderen Spring Bean FooService abhängig :

@Service public class FooService { public String getHeader() { return "Display All Beans"; } public String getBody() { return "This is a sample application that displays all beans " + "in Spring IoC container using ListableBeanFactory interface " + "and Spring Boot Actuators."; } }

Beachten Sie, dass wir hier zwei verschiedene Bohnen erstellt haben:

  1. fooController
  2. fooService

Während der Ausführung dieser Anwendung verwenden wir das applicationContext- Objekt und rufen dessen Methode getBeanDefinitionNames () auf , die alle Beans in unserem applicationContext- Container zurückgibt :

@SpringBootApplication public class Application { private static ApplicationContext applicationContext; public static void main(String[] args) { applicationContext = SpringApplication.run(Application.class, args); displayAllBeans(); } public static void displayAllBeans() { String[] allBeanNames = applicationContext.getBeanDefinitionNames(); for(String beanName : allBeanNames) { System.out.println(beanName); } } }

Dadurch werden alle Beans aus dem applicationContext- Container gedruckt :

fooController fooService //other beans

Beachten Sie, dass neben den von uns definierten Beans auch alle anderen Beans in diesem Container protokolliert werden . Aus Gründen der Klarheit haben wir sie hier weggelassen, da es ziemlich viele davon gibt.

4. Verwenden des Spring Boot Actuator

Die Spring Boot Actuator-Funktionalität bietet Endpunkte, die zur Überwachung der Statistiken unserer Anwendung verwendet werden.

Es enthält viele integrierte Endpunkte, einschließlich / Beans. Dies zeigt eine vollständige Liste aller von Spring verwalteten Beans in unserer Anwendung an. Die vollständige Liste der vorhandenen Endpunkte finden Sie in den offiziellen Dokumenten.

Jetzt drücken wir einfach die URL //: / bean. Wir können unseren Standardserver-Port verwenden, wenn wir keinen separaten Verwaltungsport angegeben haben. Dies gibt eine JSON- Antwort zurück, in der alle Beans im Spring IoC Container angezeigt werden:

[ { "context": "application:8080", "parent": null, "beans": [ { "bean": "fooController", "aliases": [], "scope": "singleton", "type": "com.baeldung.displayallbeans.controller.FooController", "resource": "file [E:/Workspace/tutorials-master/spring-boot/target /classes/com/baeldung/displayallbeans/controller/FooController.class]", "dependencies": [ "fooService" ] }, { "bean": "fooService", "aliases": [], "scope": "singleton", "type": "com.baeldung.displayallbeans.service.FooService", "resource": "file [E:/Workspace/tutorials-master/spring-boot/target/ classes/com/baeldung/displayallbeans/service/FooService.class]", "dependencies": [] }, // ...other beans ] } ]

Natürlich besteht dies auch aus vielen anderen Bohnen, die sich im selben Frühlingsbehälter befinden, aber der Klarheit halber haben wir sie hier weggelassen.

Wenn Sie mehr über Spring Boot Actuators erfahren möchten, lesen Sie das Haupthandbuch für Spring Boot Actuators.

5. Schlussfolgerung

In diesem Artikel haben wir gelernt, wie alle Beans in einem Spring IoC-Container mithilfe der ListableBeanFactory- Schnittstelle und Spring Boot Actuators angezeigt werden.

Die vollständige Implementierung dieses Tutorials finden Sie auf Github.