Перейти к основному содержимому

Как получить все компоненты, управляемые Spring?

· 3 мин. чтения

1. Обзор

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

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

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

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

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

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

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

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

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

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

Этот контроллер зависит от другого компонента 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() , который вернет все bean-компоненты в нашем контейнере 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);
}
}
}

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

fooController
fooService
//other beans

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

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

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

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

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

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

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

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

5. Вывод

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

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