TIL/스프링 핵심원리 - 기본편 with 인프런(김영한님)

스프링 핵심원리 기본편7 - 스프링 빈 조회(기본)

JJONGSTORY 2024. 7. 8. 12:28
반응형

안녕하세요. 스프링 빈을 조회하는 기본적인 방법을 공부해 보겠습니다.

 

getBean(빈이름,타임)으로 조회가 가능하며 빈이름은 생량이 가능합니다.

 

실습으로 확인해보기 위한 코드는 아래와 같고

 

1
2
3
4
        AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); 
        MemberService memberService = ac.getBean("memberService",MemberService.class);
        System.out.println("memberService = " + memberService);
        System.out.println("memberService.getClass() = " + memberService.getClass());
cs

 

결과는 아래 사진으로 나왔습니다.

 

검증은 Assertions로 가능합니다.

 

이름 없이 타입으로만 조회해도 결과는 같았습니다.

코드는 아래와 같이 이름을 생략하였습니다.

1
2
3
        MemberService memberService = ac.getBean(MemberService.class);
        System.out.println("memberService = " + memberService);
        System.out.println("memberService.getClass() = " + memberService.getClass());
cs

 

또 구체 타입으로도 조회가 가능합니다.

 

MemberService memberService = ac.getBean("memberService",MemberServiceImpl.class);

위와 같이 인터페이스가 아니라 impl로 조회해도 에러가 발생하지 않습니다.

 

하지만 위처럼 검사하는 것은 역할에 의존해야 하는데 구현에 의존하였기 때문에 좋은 테스트 코드라고 할 수 없습니다.

 

모든 테스트는 실패 테스트도 같이 해주어야 합니다.

빈 이름을 등록하지 않은 빈 이름으로 확인을 한다면

 

 

위와 같이 no bean named 에러가 생깁니다.

 

1
2
        assertThrows(NoSuchBeanDefinitionException.class,
                () -> ac.getBean("memberServicexxxx",MemberService.class));
cs

 

assertThrows를 통해 실패 테스트를 완료하였습니다.

 

 

반응형