Comment obtenir tous les beans gérés par Spring?

1. Vue d'ensemble

Dans cet article, nous explorerons différentes techniques pour afficher tous les beans gérés par Spring avec le conteneur.

2. Le conteneur IoC

Un bean est la base d'une application gérée par Spring; tous les grains résident dans le conteneur IOC, qui est responsable de la gestion de leur cycle de vie.

Nous pouvons obtenir une liste de tous les beans de ce conteneur de deux manières:

  1. Utilisation d'une interface ListableBeanFactory
  2. Utilisation d'un actionneur Spring Boot

3. Utilisation de l' interface ListableBeanFactory

L' interface ListableBeanFactory fournit la méthode getBeanDefinitionNames () qui renvoie les noms de tous les beans définis dans cette fabrique. Cette interface est implémentée par toutes les usines de bean qui préchargent leurs définitions de bean pour énumérer toutes leurs instances de bean.

Vous pouvez trouver la liste de toutes les sous-interfaces connues et de ses classes d'implémentation dans la documentation officielle.

Pour cet exemple, nous utiliserons une application Spring Boot.

Tout d'abord, nous allons créer des haricots de printemps. Créons un simple 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"; } }

Ce Controller dépend d'un autre Spring Bean FooService :

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

Notez que nous avons créé deux beans différents ici:

  1. fooController
  2. fooService

Lors de l'exécution de cette application, nous allons utiliser l' objet applicationContext et appeler sa méthode getBeanDefinitionNames () , qui retournera tous les beans de notre conteneur 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); } } }

Cela imprimera tous les beans du conteneur applicationContext :

fooController fooService //other beans

Notez qu'avec les beans définis par nous, il enregistrera également tous les autres beans qui se trouvent dans ce conteneur . Par souci de clarté, nous les avons omis ici car il y en a beaucoup.

4. Utilisation de Spring Boot Actuator

La fonctionnalité Spring Boot Actuator fournit des points de terminaison qui sont utilisés pour surveiller les statistiques de notre application.

Il comprend de nombreux points de terminaison intégrés, y compris / beans. Cela affiche une liste complète de tous les beans gérés par Spring dans notre application. Vous pouvez trouver la liste complète des points de terminaison existants sur les documents officiels.

Maintenant, nous allons simplement frapper l'URL //: / beans. Nous pouvons utiliser notre port de serveur par défaut si nous n'avons spécifié aucun port de gestion distinct. Cela renverra une réponse JSON affichant tous les beans dans le conteneur 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 ] } ]

Bien sûr, cela comprend également de nombreux autres haricots qui résident dans le même conteneur à ressort, mais pour des raisons de clarté, nous les avons omis ici.

Si vous souhaitez en savoir plus sur les actionneurs Spring Boot, vous pouvez vous diriger vers le guide principal des actionneurs Spring Boot.

5. Conclusion

Dans cet article, nous avons appris comment afficher tous les beans dans un conteneur Spring IoC à l' aide de l' interface ListableBeanFactory et des actionneurs Spring Boot.

La mise en œuvre complète de ce tutoriel est disponible sur Github.