@Component
public class MemberServiceImpl implements MemberService {
private final MemberRepository memberRepository;
@Autowired
//생성자에 붙여주면 파라미터에 있는 그 타입에 맞는 애를(memoryMemberRepository) 가져와서 의존성 주입
public MemberServiceImpl(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
⁝
@Configuration
@ComponentScan(
excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class)
)
public class AutoAppConfig {
//지금 구현체들에 @component 붙여서 빈등록을 시켜줬는데
//그러면 의존관계는 어떻게 만들어주느냐하면, 여기다가 적는게 아니고
//구현체들쪽에서 @autowired를 통해서!
}
@ComponentScan은 @Component가 붙은 모든 클래스를 bean으로 등록
이때 bean이름은 클래스명인데, 맨 앞글자만 소문자로
💯 MemberServiceImpl → memberServiceImpl
직접 이름 지정하고 싶으면 @Component("memberService")이런식으로 쓰기
@Test
void basicScan() {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class);
MemberService memberService = ac.getBean(MemberService.class);
assertThat(memberService).isInstanceOf(MemberService.class);
}