«1. Обзор

В этой статье мы рассмотрим различные методы отображения всех компонентов, управляемых Spring, внутри контейнера.

2. Контейнер IoC

Компонент — это основа приложения, управляемого Spring; все bean-компоненты находятся в IOC-контейнере, который отвечает за управление их жизненным циклом.

Мы можем получить список всех bean-компонентов в этом контейнере двумя способами:

  1. Using a ListableBeanFactory interface
  2. Using a Spring Boot Actuator

3. Использование интерфейса ListableBeanFactory

Интерфейс ListableBeanFactory предоставляет метод getBeanDefinitionNames(), который возвращает имена всех bean-компонентов, определенных в этой фабрике. Этот интерфейс реализуется всеми фабриками компонентов, которые предварительно загружают свои определения компонентов для перечисления всех своих экземпляров компонентов.

Вы можете найти список всех известных подынтерфейсов и классов их реализации в официальной документации.

В этом примере мы будем использовать приложение Spring Boot.

Сначала мы создадим несколько компонентов Spring. Давайте создадим простой контроллер Spring FooController:

@Controller
public class FooController {

    @Autowired
    private FooService fooService;
    
    @RequestMapping(value="/displayallbeans") 
    public String getHeaderAndBody(Map model){
        model.put("header", fooService.getHeader());
        model.put("message", fooService.getBody());
        return "displayallbeans";
    }
}

Этот контроллер зависит от другого bean-компонента Spring FooService:

@Service
public class FooService {
    
    public String getHeader() {
        return "Display All Beans";
    }
    
    public String getBody() {
        return "This is a sample application that displays all beans "
          + "in Spring IoC container using ListableBeanFactory interface "
          + "and Spring Boot Actuators.";
    }
}

Обратите внимание, что здесь мы создали два разных bean-компонента:

  1. fooController
  2. fooService

При выполнении этого приложения мы воспользуемся объектом applicationContext и вызовем его метод getBeanDefinitionNames(), который вернет все бины в нашем контейнере applicationContext:

@SpringBootApplication
public class Application {
    private static ApplicationContext applicationContext;

    public static void main(String[] args) {
        applicationContext = SpringApplication.run(Application.class, args);
        displayAllBeans();
    }
    
    public static void displayAllBeans() {
        String[] allBeanNames = applicationContext.getBeanDefinitionNames();
        for(String beanName : allBeanNames) {
            System.out.println(beanName);
        }
    }
}

Это напечатает все бины из контейнера applicationContext:

fooController
fooService
//other beans

Обратите внимание, что наряду с определенные нами bean-компоненты, он также будет регистрировать все остальные bean-компоненты, находящиеся в этом контейнере. Для ясности мы их здесь не приводим, потому что их довольно много.

4. Использование Spring Boot Actuator

Функциональность Spring Boot Actuator предоставляет конечные точки, которые используются для мониторинга статистики нашего приложения.

Он включает множество встроенных конечных точек, в том числе /beans. Это отображает полный список всех управляемых компонентов Spring в нашем приложении. Вы можете найти полный список существующих конечных точек в официальных документах.

Теперь мы просто нажмем URL http://\u003caddress\u003e:\u003cmanagement-port\u003e/beans. Мы можем использовать наш порт сервера по умолчанию, если мы не указали отдельный порт управления. Это вернет ответ JSON, отображающий все bean-компоненты в Spring IoC Container: опустил их здесь.

Если вы хотите узнать больше об актуаторах Spring Boot, вы можете перейти к основному руководству по актуаторам Spring Boot.

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

5. Заключение

В этой статье мы узнали о том, как отобразить все bean-компоненты в Spring IoC Container, используя интерфейс ListableBeanFactory и активаторы Spring Boot.

Полную реализацию этого руководства можно найти на Github.

«

The full implementation of this tutorial can be found over on Github.