5. 컴포넌트 스캔

2025. 1. 28. 13:49·Spring

이 포스팅은 인프런에 있는 김영한 강사님의 스프링 핵심 원리 강의를 들으며 개인 공부를 한 것입니다.
소스코드는 제가 직접 작성하였습니다. (참고 : 깃허브주소)

✅ 컴포넌트 스캔과 의존관계 자동 주입하기

  • 등록해야 할 스프링 빈이 수십, 수백개가 되면 일일이 등록하기 귀찮고, 설정 정보도 커지고, 누락하는 문제도 발생한다
  • 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다
    • 기존 코드에 AppConfig 클래스에 설정 정보를 작성 및 의존성 주입을 해주었다
  • 의존관계도 자동으로 주입하는 @Autowired 라는 기능도 제공한다

변경된 AppConfig
스크린샷 2024-11-10 오후 9 31 30

컴포넌트 스캔

  • @ComponentScan을 설정정보에 붙여준다
  • 기존의 AppConfig와 다르게 @Bean으로 등록한 클래스가 하나도 없다
  • AppConfig에 등록된 빈의 각 클래스가 컴포넌트 스캔의 대상이 되도록 @Component 애노테이션을 붙여줘야한다
    • SmsServiceImpl, CustServiceImpl, SmsFilterImpl, MemoryCustRepository, MemorySmsRepository 가 해당된다
  • 빈 이름 기본 전략 : SmsServiceImpl 클래스 -> smsServiceImpl
  • 빈 이름 직접 지정 : @Component("smsServcie")

변경된 SmsServiceImpl.java
스크린샷 2024-11-10 오후 10 45 29

의존관계 자동 주입

  • 이전에 AppConfig에서는 @Bean으로 직접 설정 정보를 작성했고, 의존관계도 직접 명시했다. 이제는 이런 설정 정보 자체가 없기 때문에, 의존관계 주입도 클래스 안에서 직접 해결해야 한다.
    • 이때 SmsServiceImpl, CustServiceImpl, SmsFilterImpl 생성자가 있는 클래스는 생성자위에 @Autowired 를 추가한다
  • 생성자에 @Autowired를 지정하면 스프링 컨테이너가 자동으로 해당 스프링 빈을 찾아서 주입한다
  • 이때 기본 조회 전략은 타입이 같은 빈을 찾아서 주입한다.
  • 생성자에 파라미터가 많아도 다 찾아서 자동으로 주입한다.

✅ 탐색 위치와 기본 스캔 대상

  • 모든 자바 클래스를 다 컴포넌트 스캔하면 시간이 오래 걸린다 그래서 꼭 필요한 위치부터 탐색하도록 시작 위치를 지정할 수 있다
    • @ComponentScan(basePackages = "com.jisutudy")
    • 지정하지 않으면 @ComponentScan이 붙은 설정 정보 클래스의 패키지가 시작 위치가 된다
  • 권장하는 방법 : 패키지 위치를 지정하지 않고, 설정 정보 클래스의 위치를 프로젝트 최상단에 두는 것이다
    • 프로젝트 메인 설정 정보는 프로젝트를 대표하는 정보이기 때문에 프로젝트 시작 루트 위치에 두는것이 좋다
    • @SpringBootApplication를 프로젝트 시작 루트 위치에 두는 것이 관례이다
      • 이 설정안에 @ComponentScan이 들어있다

✅ 필터

  • includeFilters : 컴포넌트 스캔 대상을 추가로 지정한다
  • excludeFilters : 컴포넌트 스캔에서 제외할 대상을 지정한다

'Spring' 카테고리의 다른 글

컨트롤러 메서드에서 매개변수 이름을 명시하지 않아서 발생한 IllegalArgumentException  (0) 2025.01.28
6. 의존관계 자동주입  (0) 2025.01.28
4. 싱글톤 컨테이너  (0) 2025.01.28
3. 스프링으로 전환하기  (0) 2024.11.02
2. OCP, DIP 위반 해결방법  (0) 2024.11.02
'Spring' 카테고리의 다른 글
  • 컨트롤러 메서드에서 매개변수 이름을 명시하지 않아서 발생한 IllegalArgumentException
  • 6. 의존관계 자동주입
  • 4. 싱글톤 컨테이너
  • 3. 스프링으로 전환하기
꾸준히 기록하는 지수
꾸준히 기록하는 지수
서비스 백엔드 개발자가 되기 위해 제 경험들을 하나씩 기록해봅니다
  • 꾸준히 기록하는 지수
    지수블로그
    꾸준히 기록하는 지수
  • 전체
    오늘
    어제
    • 분류 전체보기 (37)
      • Spring (15)
      • JAVA (9)
      • 클라우드_인프라 (4)
      • Data (5)
      • CS (3)
      • 돌아보기 (0)
      • 취업준비 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    DASP합격
    트랜잭션전파
    DASP합격후기
    자격증
    스프링
    SCG
    스프링테스트
    데이터아키텍처준전문가
    궁금증
    Spring
    MSA
    AWS
    트러블슈팅
    스프링클라우드
    스프링부트
    DASP후기
    스프링트랜잭션
    SpringCloudGateway
    트랜잭션
    DAsP
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
꾸준히 기록하는 지수
5. 컴포넌트 스캔
상단으로

티스토리툴바