Hoe krijg ik alle lente-beheerde bonen?

1. Overzicht

In dit artikel zullen we verschillende technieken onderzoeken om alle door Spring beheerde bonen binnen de container weer te geven.

2. De IoC-container

Een boon is de basis van een door Spring beheerde applicatie; alle bonen bevinden zich in de IOC-container, die verantwoordelijk is voor het beheer van hun levenscyclus.

We kunnen op twee manieren een lijst krijgen van alle bonen in deze container:

  1. Gebruik maken van een ListableBeanFactory koppel
  2. Met behulp van een veerbootactuator

3. Met behulp van ListableBeanFactory Koppel

De ListableBeanFactory interface biedt getBeanDefinitionNames () methode die de namen retourneert van alle bonen die in deze fabriek zijn gedefinieerd. Deze interface wordt geïmplementeerd door alle bonenfabrieken die hun bean-definities vooraf laden om al hun bean-exemplaren op te sommen.

U kunt de lijst met alle bekende subinterfaces en de implementatieklassen vinden in de officiële documentatie.

Voor dit voorbeeld gebruiken we een Spring Boot-applicatie.

Eerst maken we wat lentebonen. Laten we een eenvoudige Spring Controller maken FooController:

@Controller openbare klasse FooController {@Autowired privé FooService fooService; @RequestMapping (value = "/ displayallbeans") openbare String getHeaderAndBody (kaartmodel) {model.put ("header", fooService.getHeader ()); model.put ("bericht", fooService.getBody ()); retourneer "displayallbeans"; }}

Deze Controller is afhankelijk van een andere Spring bean FooService:

@Service openbare klasse FooService {openbare String getHeader () {retourneer "Alle bonen weergeven"; } public String getBody () {return "Dit is een voorbeeldtoepassing die alle bonen" + "weergeeft in Spring IoC-container met behulp van ListableBeanFactory-interface" + "en Spring Boot Actuators."; }}

Merk op dat we hier twee verschillende bonen hebben gemaakt:

  1. fooController
  2. fooService

Tijdens het uitvoeren van deze applicatie gebruiken we applicationContext object en noem zijn getBeanDefinitionNames () methode, die alle bonen in ons applicationContext container:

@SpringBootApplication openbare klasse Application {privé statische ApplicationContext applicationContext; openbare statische leegte hoofd (String [] args) {applicationContext = SpringApplication.run (Application.class, args); displayAllBeans (); } openbare statische leegte displayAllBeans () {String [] allBeanNames = applicationContext.getBeanDefinitionNames (); voor (String beanName: allBeanNames) {System.out.println (beanName); }}}

Hiermee worden alle bonen afgedrukt applicationContext container:

fooController fooService // andere bonen

Merk op dat samen met door ons gedefinieerde bonen, het zal ook alle andere bonen in deze container loggen. Voor de duidelijkheid hebben we ze hier weggelaten omdat er nogal wat zijn.

4. Met behulp van Spring Boot Actuator

De Spring Boot Actuator-functionaliteit biedt eindpunten die worden gebruikt om de statistieken van onze applicatie te bewaken.

Het bevat veel ingebouwde eindpunten, waaronder /bonen. Dit toont een volledige lijst van alle door Spring beheerde bonen in onze applicatie. U kunt de volledige lijst met bestaande eindpunten vinden in de officiële documenten.

Nu gaan we gewoon naar de URL //:/bonen. We kunnen onze standaard serverpoort gebruiken als we geen aparte beheerpoort hebben gespecificeerd. Dit zal een JSON reactie met alle bonen in de Spring IoC-container:

[{"context": "application: 8080", "parent": null, "beans": [{"bean": "fooController", "aliases": [], "scope": "singleton", "type" : "com.baeldung.displayallbeans.controller.FooController", "resource": "bestand [E: / Workspace / tutorials-master / spring-boot / target /classes/com/baeldung/displayallbeans/controller/FooController.class]" , "afhankelijkheden": ["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] "," afhankelijkheden ": []}, // ... andere bonen]}]

Dit bestaat natuurlijk ook uit vele andere bonen die in dezelfde springcontainer zitten, maar voor de duidelijkheid hebben we ze hier weggelaten.

Als je meer wilt weten over Spring Boot Actuators, kun je naar de hoofdgids Spring Boot Actuator gaan.

5. Conclusie

In dit artikel hebben we geleerd hoe we alle bonen in een Lente IoC-container gebruik makend van ListableBeanFactory interface en Spring Boot Actuators.

De volledige implementatie van deze tutorial is te vinden op Github.