AppConfig를 통한 수동 빈 설정에 대한 수업을 듣고
컴포넌트 스캔을 이용한 자동 빈 설정에 대한 수업을 듣는 와중...
자동 빈 설정에 대한 결과는 테스트 코드를 통해서 확인하고 있었는데
지금 자동 빈 설정하고 있는 결과를 애플리케이션 코드에서 확인을 직접해보고 싶어서 코드를 무지성으로 고치던 중
ApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class);
MemberService memberService = ac.getBean("memberService", MemberService.class);
이러한 코드를 작성하였는데 (수동 빈 설정에서 memberService라는 인터페이스 형태로 구현체를 가져오는 메서드가 있어서 memberService라는 이름의 빈객체를 만들었음)
No bean named 'memberService' available 라는 에러가 발생하였다. (이 글과 별 상관 없음..)
이 문제는 잘 해결하였지만
나의 눈을 보이는 건
Ignored because not a concrete top-level class: file [/Users/josihyeon/Documents/study project/core/out/production/classes/hello/core/discount/DiscountPolicy.class] 바로 이 한 줄 이였다.
인터페이스는 구체클래스가 아니여서 무시 당했다..
아니다.
기본적으로 Spring Framework에서 구성 요소 스캔을 사용한다고 해서 자동으로 인터페이스가 빈 객체가 되는 것은 아닙니다.
그러나 bean객체로 사용하려는 경우, 인터페이스의 다른 구현을 제공하고 적절하게 주석을 추가하거나 다른 메커니즘을 사용하여 인터페이스를 bean객체로 등록할 수 있습니다.