Как получить все бобы с пружинным управлением?

Как получить всю фасоль с пружинным управлением?

1. обзор

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

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

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

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

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

  2. Использование привода Spring Boot

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

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

Вы можете найти список всех известных подинтерфейсов и их реализующих классов вthe official documentation.

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

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

@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";
    }
}

Этот контроллер зависит от другого компонента SpringFooService:

@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.";
    }
}

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

  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

Обратите внимание, что вместе с определенными нами beansit will also log all other beans that are in this container. Для ясности мы их здесь опускаем, потому что их довольно много.

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

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

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

 

Теперь мы просто нажмем URLhttp://<address>:<management-port>/beans.. Мы можем использовать наш порт сервера по умолчанию, если мы не указали какой-либо отдельный порт управления. Это вернет ответJSON, отображающий все компоненты в контейнере Spring IoC:

[
    {
        "context": "application:8080",
        "parent": null,
        "beans": [
            {
                "bean": "fooController",
                "aliases": [],
                "scope": "singleton",
                "type": "com.example.displayallbeans.controller.FooController",
                "resource": "file [E:/Workspace/tutorials-master/spring-boot/target
                  /classes/com/example/displayallbeans/controller/FooController.class]",
                "dependencies": [
                    "fooService"
                ]
            },
            {
                "bean": "fooService",
                "aliases": [],
                "scope": "singleton",
                "type": "com.example.displayallbeans.service.FooService",
                "resource": "file [E:/Workspace/tutorials-master/spring-boot/target/
                  classes/com/example/displayallbeans/service/FooService.class]",
                "dependencies": []
            },
            // ...other beans
        ]
    }
]

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

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

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

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

full implementation этого руководства можно найтиover on Github.