[스프링 기본] 컴포넌트 스캔

마코레·2022년 6월 22일
0

백엔드개발

목록 보기
17/18

컴포넌트 스캔 & 의존관계 자동주입


사용계기

  • 지금까지는 bean 등록할 때 @bean이나 XML 사용해서 직접 등록할 빈을 나열하는식
    → 이럼 진짜 개귀찮고 실수도 유발될 수 있음.
  • 그래서 spring에서는 여러 기능 제공함.
    • 빈 자동 등록하는 컴포넌트 스캔
    • 의존관계 자동 주입하는 @autowired

코드 작성법

@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를 통해서!
}

사용 시 이점

  • 이전에는 AppConfig에서 @Bean으로 직접 설정 정보를 작성하고, 의존관계도 직접 명시했음
  • @Component와 @Autowired를 사용하면 이런 설정 정보 자체를 명시할 필요가 없음.
  • @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);
    }

결과

intellij 단축키 꿀팁


  • Home키 누르면 코드 맨앞으로 이동
  • End키 누르면 코드 맨뒤로 이동
  • 그래서 지금 코드 앞쪽 보고있는데 담줄 쓰고싶다카면 end + enter하면 되는거임!
profile
새싹 백엔드 개발자

0개의 댓글