스프링 핵심 원리 - 기본편(컴포넌트 스캔과 의존관계 자동 주입)

2022. 4. 25. 17:29·Spring

스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 @ComponentScan이라는 기능을 제공한다.

또한 의존관계도 자동으로 주입하는 @Autorwired라는 기능을 제공한다.

 

생성자에 @Autowired를 넣어 의존관계를 주입해보자💨

@Component
public class MemberServiceImpl implements MemberService{
    private MemberRepository memberRepository;

    @Autowired
    public MemberServiceImpl(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }

[ComponentScan]

스프링 컨테이너가 @Component 어노테이션이 붙은 빈들을 찾는다.

생성자의 파라미터 타입(위의 경우 MemberRepository)을 찾아서 가져온다.

같은 타입이 여러개 있으면?  충돌이 나게 된다  :( 

<스프링 빈의 충돌>
같은 이름의 자동 생성 빈 vs 자동 생성 빈일 경우 충돌이 난다
그러나 같은 네임의 자동 생성 빈 vs 수동 생성 빈은 덮어쓰게 되나 잡기 어려운 버그가 만들어진다.
그래서 최근에는 스프링 부트에서 자동 생성 빈과 수동 생성 빈이 충돌될 경우 오류가 나도록 설정되었다.

 

1. basePackages

basePackages = "탐색 패키지 위치 지정" -> 모든 자바 코드, 라이브러리를 탐색시 시간 낭비..

지정하지 않으면 ComponentScan이 붙은 설정 클래스가 포함된 패키지 위치로 지정된다.

 

@ComponentScan(
        excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = {Configuration.class}),
        basePackages= "hello.core",
        basePackageClasses = AutoAppConfig.class
)

[ComponentScan의 대상]

@Component / @Controller /  @Service / @Repository / @Configuration

 

2. Filters

excludeFilters  / includeFilters

아래와 같이 사용한다.

@ComponentScan(includeFilters = @Filter(type = FilterType.ANNOTATION, classes = MyIncludeComponent.class),
        excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = MyExcludeComponent.class))
@Configuration
static class ComponentFilterAppConfig {
}

<FilterType>

ANNOTATION: annotation을 인식해서 실행(default) (주로 사용)

ASSIGNABLE_TYPE: 지정한 타입과 자식 타입을 인식해서 동작

ASPECTJ : AspectJ 패턴 사용

REGEX : 정규 표현식

CUTSOM : TypeFilter이라는 인터페이스를 구현해서 처리한다.

저작자표시 비영리 변경금지 (새창열림)

'Spring' 카테고리의 다른 글

스프링 핵심 원리 - 기본편(빈 스코프)  (0) 2022.04.28
스프링 핵심 원리 - 기본편(빈 생명주기 콜백)  (0) 2022.04.27
스프링 핵심 원리 - 기본편(의존관계 자동 주입)  (0) 2022.04.27
스프링 핵심 원리(기본편) - 스프링 컨테이너와 스프링 빈  (0) 2022.04.18
스프링 핵심 원리(기본편) - 객체 지향 원리 적용  (0) 2022.04.17
'Spring' 카테고리의 다른 글
  • 스프링 핵심 원리 - 기본편(빈 생명주기 콜백)
  • 스프링 핵심 원리 - 기본편(의존관계 자동 주입)
  • 스프링 핵심 원리(기본편) - 스프링 컨테이너와 스프링 빈
  • 스프링 핵심 원리(기본편) - 객체 지향 원리 적용
코드파고
코드파고
  • 코드파고
    Digging Code
    코드파고
  • 전체
    오늘
    어제
    • 분류 전체보기 (99)
      • Memorization (12)
      • Spring (18)
      • Java (1)
      • Algorithm (40)
      • Server (2)
      • DB (0)
      • CS (0)
      • CI & CD (4)
      • Architecture (0)
      • Design Patterns (0)
      • Study (1)
      • Book (9)
        • DEV (7)
        • Non-DEV (0)
      • Infra (1)
        • Kafka (6)
        • AWS (4)
      • TroubleShooting (1)
        • Etc (1)
      • Tools (0)
  • 블로그 메뉴

    • 홈
    • Github
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    architecture
    Spring
    헥사고날아키텍쳐
    clean architecture
    Clean Code
    클린아키텍쳐
    Spring독학
    알고리즘
    SpringFramework
    Spring Boot
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
코드파고
스프링 핵심 원리 - 기본편(컴포넌트 스캔과 의존관계 자동 주입)
상단으로

티스토리툴바