Рубрики
Без рубрики

Как получить Все Весенние бобы?

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

Автор оригинала: baeldung.

1. Обзор

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

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

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

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

  1. Использование интерфейса ListableBeanFactory
  2. Использование привода пружинного ботинка

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

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

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

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

Во-первых, мы создадим несколько весенних бобов. Давайте создадим простой пружинный контроллер 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";
    }
}

Этот контроллер зависит от другого весеннего боба Служба питания :

@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. продовольственный сервис

При выполнении этого приложения мы будем использовать объект ApplicationContext и вызовем его метод getbeandefinitionname () , который вернет все компоненты в нашем контейнере 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

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

4. Использование Привода Пружинного Ботинка

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

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

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

[
    {
        "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
        ]
    }
]

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

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

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

В этой статье мы узнали о том, как отобразить все компоненты в контейнере Spring IoC с помощью ListableBeanFactory интерфейса и приводов загрузки Spring.

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