해결된 질문
작성
·
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");
감사합니다.