Spring/스프링 핵심 원리 - 기본편
[컴포넌트 스캔] @Component, @Autowired - 의존 관계 자동 주입
alsruds
2023. 12. 5. 01:59
🧐강의🧐
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard
🫧 @ComponentScan
☑️ @Component 가 붙은 모든 클래스를 스프링 빈으로 등록 (설정 정보 없이 스프링 빈 자동 등록)
· 스프링 빈 이름 기본 규칙 : 클래스명 (맨 앞글자만 소문자로 변경)
》ex) MemberServiceImpl → memberServiceImpl
》빈 이름 직접 지정 : @Component("memberService2")
🫧 @Autowired
☑️ 생성자에 @Autowired 지정 시, 스프링 컨테이너가 해당 스프링 빈 의존 관계 자동 주입
TEST
☑️ @Component, @Autowired 애노테이션 지정으로 등록된 스프링 빈 의존 관계 확인하기
1. main/java/hello.core/AutoAppConfig Class 생성
@Configuration
@ComponentScan(
// AppConfig 설정 정보 제외하기
excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class)
)
public class AutoAppConfig { }
2. 구현체에 @Component, @Autowired 애노테이션 지정
· MemoryMemberRepository : @Component
· RateDiscountPolicy : @Component
· MemberServiceImpl : @Component & @Autowired
· OrderServiceImpl : @Component & @Autowired
3. test/java/hello.core/scan Package 생성
4. scan 패키지에 AutoAppConfigTest Class 생성
public class AutoAppConfigTest {
@Test
void basicScan() {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class);
MemberService memberService = ac.getBean(MemberService.class);
assertThat(memberService).isInstanceOf(MemberService.class);
}
}
· 테스트 결과