Как узнать имена всех beans, которые загружаются как часть моего загрузочного приложения spring? Я хотел бы иметь некоторый код в основном методе для печати деталей beans, которые загружаются после запуска сервера.
Распечатайте все загруженные Spring beans - Spring Загрузка
Ответ 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 в приложении. Вы говорите "как только сервер запущен", поэтому это вариант для веб-приложений.
Чтобы настроить привод
Список конечных точек в приводе
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 загрузит этот класс и выполнит сразу после загрузки контекста. Тогда вы можете просто удалить файл, и все понятно.