인프런 커뮤니티 질문&답변

공부하는이님의 프로필 이미지
공부하는이

작성한 질문수

스프링 핵심 원리 - 기본편

인터페이스 InitializingBean, DisposableBean

SpringApplication 내부에서 getBeanDefinition 호출

해결된 질문

작성

·

222

0

 

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

 

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

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

어떻게 해야 하나요?

 

SpringApplication.run(CoreApplication.class, args) 은

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

 

답변 1

2

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

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

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

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

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

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

감사합니다.

공부하는이님의 프로필 이미지
공부하는이

작성한 질문수

질문하기