Распечатайте все загруженные Spring beans - Spring Загрузка

Как узнать имена всех beans, которые загружаются как часть моего загрузочного приложения spring? Я хотел бы иметь некоторый код в основном методе для печати деталей beans, которые загружаются после запуска сервера.

Ответ 1

Как показано в руководстве по началу работы spring -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 inspect the beans provided by Spring Boot:");

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

Ответ 2

Могу ли я предложить использовать Actuator? он предоставляет несколько конечных точек, включая /beans, в котором перечислены все beans в приложении. Вы говорите "как только сервер запущен", поэтому это вариант для веб-приложений.

Чтобы настроить привод

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

Список конечных точек в приводе

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

Ответ 3

Ну, хотя, этот вопрос уже ответил, я все же хочу предоставить ответ, который является вариантом Java 8:)

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

Позволяет делать Java 8!!!

Ответ 4

На самом деле я бы рекомендовал создать этот класс, кроме изменения вашего @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 загрузит этот класс и выполнит сразу после загрузки контекста. Тогда вы можете просто удалить файл, и все понятно.