Come ottenere tutti i fagioli gestiti a primavera?

1. Panoramica

In questo articolo, esploreremo diverse tecniche per visualizzare tutti i bean gestiti da Spring all'interno del contenitore.

2. Il contenitore IoC

Un bean è la base di un'applicazione gestita da Spring; tutti i fagioli risiedono all'interno del contenitore IOC, che è responsabile della gestione del loro ciclo di vita.

Possiamo ottenere un elenco di tutti i fagioli all'interno di questo contenitore in due modi:

  1. Utilizzando un ListableBeanFactory un'interfaccia
  2. Utilizzo di un attuatore Spring Boot

3. Utilizzo dell'interfaccia ListableBeanFactory

L' interfaccia ListableBeanFactory fornisce il metodo getBeanDefinitionNames () che restituisce i nomi di tutti i bean definiti in questa factory. Questa interfaccia è implementata da tutti i bean factory che precaricano le loro definizioni di bean per enumerare tutte le loro istanze di bean.

Puoi trovare l'elenco di tutte le sottointerfacce conosciute e delle sue classi di implementazione nella documentazione ufficiale.

Per questo esempio, utilizzeremo un'applicazione Spring Boot.

Per prima cosa creeremo dei fagioli primaverili. Creiamo un semplice FooController Spring Controller :

@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"; } }

Questo controller dipende da un altro FooService di Spring bean :

@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."; } }

Nota che abbiamo creato due bean diversi qui:

  1. fooController
  2. fooService

Durante l'esecuzione di questa applicazione, useremo l' oggetto applicationContext e chiameremo il suo metodo getBeanDefinitionNames () , che restituirà tutti i bean nel nostro contenitore applicationContext :

@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); } } }

Questo stamperà tutti i bean dal contenitore applicationContext :

fooController fooService //other beans

Notare che insieme ai bean definiti da noi, verranno registrati anche tutti gli altri bean presenti in questo contenitore . Per motivi di chiarezza, li abbiamo omessi qui perché ce ne sono molti.

4. Utilizzo di Spring Boot Actuator

La funzionalità Spring Boot Actuator fornisce endpoint che vengono utilizzati per monitorare le statistiche della nostra applicazione.

Include molti endpoint incorporati, incluso / bean. Questo mostra un elenco completo di tutti i bean gestiti da Spring nella nostra applicazione. Puoi trovare l'elenco completo degli endpoint esistenti sui documenti ufficiali.

Ora premiamo semplicemente l'URL //: / bean. Possiamo usare la nostra porta del server predefinita se non abbiamo specificato alcuna porta di gestione separata. Ciò restituirà una risposta JSON che mostra tutti i bean all'interno del contenitore Spring IoC:

[ { "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 ] } ]

Naturalmente, questo è composto anche da molti altri fagioli che risiedono nello stesso contenitore a molla, ma per motivi di chiarezza, li abbiamo omessi qui.

Se vuoi esplorare di più sugli attuatori Spring Boot, puoi andare alla guida principale di Spring Boot Actuator.

5. conclusione

In questo articolo abbiamo appreso come visualizzare tutti i bean in un contenitore Spring IoC utilizzando l' interfaccia ListableBeanFactory e gli attuatori Spring Boot.

L' implementazione completa di questo tutorial può essere trovata su Github.