-
카테고리
-
세부 분야
백엔드
-
해결 여부
해결됨
Object 타입으로 우리가 등록한 빈들 조회하기
24.02.13 16:02 작성 조회수 169
1
[질문 템플릿]
1. 예
2. 예
3. 예
[질문 내용]
강의에서 Object 타입으로 조회하면 우리가 TestConfig로 등록한 빈 뿐만아니라 스프링에서 내부적으로 설정한 빈 모두 조회된다고 했습니다.
그래서 TestConfig에서 등록한 빈들만 출력하기 위해서 앞에서 배운것들을 이용해서 코드를 작성해보았습니다.
@Test
@DisplayName("Object 타입으로 우리가 등록한 빈 조회하기")
public void findApplicationBeansByObjectType(){
Map<String, Object> beansOfType = ac.getBeansOfType(Object.class);
for (String beanName : beansOfType.keySet()) {
BeanDefinition beanDefinition = ac.getBeanDefinition(beanName);
if(beanDefinition.getRole()==BeanDefinition.ROLE_APPLICATION){
Object bean = ac.getBean(beanName);
System.out.println("빈 이름 = " + beanName+","+ "빈 타입 = "+beansOfType.get(beanName));
}
}
그런데 위 코드의 출력결과 아래와 같이 environment의 이름의 빈을 조회할 수 없다고 합니다.
NoSuchBeanDefinitionException: No bean named 'environment' available
그래서 스프링 컨테이너에 등록되어있는 빈 들을 확인하기 위해서 코드를 다시아래 처럼 다시 작성해봤습니다
@Test
@DisplayName("Object 타입으로 우리가 등록한 빈 조회하기")
public void findApplicationBeansByObjectType(){
for (String beanDefinitionName : ac.getBeanDefinitionNames()) {
BeanDefinition beanDefinition = ac.getBeanDefinition(beanDefinitionName);
if(beanDefinition.getRole()==BeanDefinition.ROLE_APPLICATION){
System.out.println("빈 이름 = " + beanDefinitionName);
}
}
// 출력결과
빈 이름 = applicationContextExtendsFindTest.TestConfig
빈 이름 = rateDiscountPolicy
빈 이름 = fixDiscountPolicy
위의 출력결과를 보면 ROLE_APPLICATION인 빈들은 3개 밖에 없는데 왜 첫번째 코드를 작성하면 environment라는 빈 이름이 없다고 오류가 발생하는건가요??
답변을 작성해보세요.
답변 2