2015-10-26 14 views
12

Come posso conoscere i nomi di tutti i bean caricati come parte della mia app di avvio a molla? Vorrei avere qualche codice nel metodo principale per stampare i dettagli dei bean che vengono caricati una volta avviato il server.Stampa tutti i bean Spring caricati - Spring Boot

+0

Possibile duplicato di [Come posso ottenere un elenco di bean istanziati da Spring?] (Http://stackoverflow.com/questions/14829258/how-can-i-get-a-list-of-stant-feans -da primavera) –

risposta

25

Come mostrato nella guida introduttiva della primavera-boot: https://spring.io/guides/gs/spring-boot/

@SpringBootApplication 
public class Application { 

    public static void main(String[] args) { 
    SpringApplication.run(Application.class, args); 
    } 

    @Bean 
    public CommandLineRunner commandLineRunner(ApplicationContext ctx) { 
    return args -> { 

     System.out.println("Let's inspect the beans provided by Spring Boot:"); 

     String[] beanNames = ctx.getBeanDefinitionNames(); 
     Arrays.sort(beanNames); 
     for (String beanName : beanNames) { 
     System.out.println(beanName); 
     } 
    }; 
    }  
} 
+0

Grazie, questo aiuta! –

7

Posso suggerire utilizzando Attuatore? fornisce diversi endpoint incluso /beans che elenca tutti i bean nell'applicazione. Dici "una volta avviato il server" quindi questa è un'opzione per le applicazioni web.

Per impostare attuatore

https://spring.io/guides/gs/actuator-service/

Elenco degli endpoint in attuatore

http://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html

+1

Grazie per aver fornito anche un'opzione diversa. Tuttavia l'approccio fornito da Yannic Klem ha funzionato. –

3

bene, anche se, a questa domanda è già una risposta, mi st voglio dare una risposta che è una variante di Java 8 :)

Arrays.asList(context.getBeanDefinitionNames()).stream().sorted().forEach(System.out::println); 

Consente di fare Java 8 !!!

0

In realtà, consiglierei di creare questa classe oltre a modificare @SpringBootApplication.

@Component 
public class ContextTeller implements CommandLineRunner { 

@Autowired 
ApplicationContext applicationContext; 

@Override 
public void run(String... args) throws Exception { 
    System.out.println("-------------> just checking!"); 

     System.out.println(Arrays.asList(applicationContext.getBeanDefinitionNames())); 

}} 

In questo modo Spring Boot caricherà questa classe ed eseguirà subito dopo aver caricato il contesto. Quindi è sufficiente rimuovere il file e tutto è chiaro.