• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

SpringApplication 내부에서 getBeanDefinition 호출

24.02.08 19:17 작성 조회수 121

0

 

지금까지 수업에서는 빈검색할때 AnnotationConfigApplicationContext 를 사용해서 설정파일을 주입했습니다.

 

마찬가지로 @SpringBootApplication 가 붙어있는 main 안에서 빈검색해서

ac.getBeanDefinition(beanDefinitionName) 을 호출하고 싶습니다.

어떻게 해야 하나요?

 

SpringApplication.run(CoreApplication.class, args) 은

AnnotationConfigApplicationContext 이 아니라 ConfigurableApplicationContext 타입을 리턴해서 getBeanDefinition 메서드가 존재하지 않습니다.

 

답변 1

답변을 작성해보세요.

2

David님의 프로필

David

2024.02.09

안녕하세요. 공부하는이님, 공식 서포터즈 David입니다.

디버깅 해보시면 볼 수 있는데, 실제 구현체는 AnnotationConfigServletWebApplicationContext 클래스의 인스턴스 입니다.

AnnotationConfigServletWebApplicationContext 클래스는 GenericWebApplicationContext 클래스를 상속 받고, GenericWebApplicationContext 클래스는 GenericApplicationContext 클래스를 상속 받고 있습니다.

GenericApplicationContext 클래스는 BeanDefinitionRegistry 인터페이스를 구현하고 있는데 이 인터페이스에 찾으시던 getBeanDefinition 메서드가 정의되어 있습니다.

따라서, GenericApplicationContext로 캐스팅해서 getBeanDefinition을 실행할 수 있습니다.

GenericApplicationContext context = (GenericApplicationContext) SpringApplication.run(YhCodingLabApplication.class, args);
context.getBeanDefinition("beanName");

감사합니다.