2015-10-26 47 views
12

如何才能知道所有加载的Spring bean启动应用程序的名称?我想在main方法中有一些代码来打印服务器启动后加载的bean的详细信息。打印所有加载的Spring bean - Spring Boot

+0

可能的重复[如何从Spring获得实例化bean的列表?](http://stackoverflow.com/questions/14829258/how-can-i-get-a-list-of-instantiated-beans -from-spring) –

回答

25

随着春天启动的入门指南中所示: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

谢谢,这有助于! –

7

我建议用执行器?它提供了几个端点,包括/beans,其中列出了应用程序中的所有bean。你说“一旦服务器启动了”,所以这是Web应用程序的一个选项。

要设立执行机构在执行端点

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

列表

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

+1

感谢您提供不同的选项。然而,Yannic Klem提供的方法确实有效。 –

3

好了,虽然,这个问题已经回答了,我ST我想提供一个答案,这是一个Java 8变体:)

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

让我们做Java 8!

0

其实我会建议除修改@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())); 

}} 

这样Spring Boot会加载这个类并在加载上下文后立即执行。然后您可以删除文件,并且一切都很清晰。