모든 스프링 관리 콩을 얻는 방법?

1. 개요

이 기사에서는 컨테이너와 함께 모든 Spring 관리 Bean을 표시하는 다양한 기술을 탐색합니다.

2. IoC 컨테이너

Bean은 Spring 관리 애플리케이션의 기초입니다. 모든 bean은 수명주기를 관리하는 IOC 컨테이너에 상주합니다.

두 가지 방법으로이 컨테이너 내의 모든 빈 목록을 가져올 수 있습니다.

  1. 사용 ListableBeanFactory 인터페이스를
  2. 스프링 부트 액추에이터 사용

3. ListableBeanFactory 인터페이스 사용

ListableBeanFactory 인터페이스를 제공합니다 () getBeanDefinitionNames을 방법 이 팩토리에 정의 된 모든 콩의 이름을 반환합니다. 이 인터페이스는 모든 빈 인스턴스를 열거하기 위해 빈 정의를 미리로드하는 모든 빈 팩토리에 의해 구현됩니다.

공식 문서에서 알려진 모든 하위 인터페이스 및 해당 구현 클래스 목록을 찾을 수 있습니다.

이 예에서는 Spring Boot 애플리케이션을 사용합니다.

먼저 Spring Bean을 생성합니다. 간단한 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 bean 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."; } }

여기에 두 개의 다른 빈을 만들었습니다.

  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 // : / beans를 입력합니다. 별도의 관리 포트를 지정하지 않은 경우 기본 서버 포트를 사용할 수 있습니다. 그러면 Spring IoC 컨테이너 내의 모든 빈을 표시 하는 JSON 응답 이 반환됩니다 .

[ { "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 Boot Actuator에 대해 자세히 알아 보려면 기본 Spring Boot Actuator 가이드를 참조하세요.

5. 결론

이 기사에서 우리는 ListableBeanFactory 인터페이스와 Spring Boot Actuators를 사용하여 Spring IoC Container 에 모든 bean을 표시하는 방법에 대해 배웠습니다 .

이 튜토리얼 의 전체 구현 은 Github에서 찾을 수 있습니다.