minstory

Spring Boot에서 @Qualifier 어노테이션의 활용 본문

Spring

Spring Boot에서 @Qualifier 어노테이션의 활용

mjuu 2024. 1. 25. 17:58

목차:

  1. 소개
    1.1 스프링에서 빈 주입과 @Qualifier 어노테이션
    1.2 @Qualifier의 역할과 필요성
  2. @Qualifier 어노테이션의 활용
    2.1 기본적인 @Qualifier 사용법
    2.2 여러 개의 빈 후보 중 명시적인 선택
    2.3 빈 이름 규칙과 @Qualifier의 연결
  3. 실제 예제: MessageMapper 인터페이스를 구현하는 여러 클래스
    3.1 MessageMapper 인터페이스 정의
    3.2 여러 구현체 클래스 생성
    3.3 @Qualifier를 사용한 명시적인 빈 선택
  4. 코드 예시 및 설명
    4.1 MessageService 클래스에서의 @Qualifier 사용
  5. 결론

1. 소개

1.1 스프링에서 빈 주입과 @Qualifier 어노테이션

스프링 프레임워크에서는 의존성 주입(Dependency Injection)을 통해 빈을 주입하는데, 이때 여러 후보 빈이 있을 때 명시적으로 어떤 빈을 주입할지 선택하는 데에 @Qualifier 어노테이션을 활용합니다.

1.2 @Qualifier의 역할과 필요성

@Qualifier 어노테이션은 빈을 식별하는 데에 사용되며, 여러 후보 빈 중에서 특정 빈을 선택할 때 필요합니다. 이를 통해 스프링은 어떤 빈을 주입해야 하는지 명시적으로 알 수 있습니다.

2. @Qualifier 어노테이션의 활용

2.1 기본적인 @Qualifier 사용법

@Qualifier 어노테이션은 주입할 빈을 명시적으로 지정하는 데 사용됩니다. 기본적으로 빈의 이름을 사용하여 어떤 빈을 주입할지 결정합니다.

2.2 여러 개의 빈 후보 중 명시적인 선택

여러 개의 동일한 타입을 가진 빈 중에서 특정한 빈을 선택하려면 @Qualifier를 사용하여 해당 빈의 이름을 명시적으로 지정해야 합니다.

2.3 빈 이름 규칙과 @Qualifier의 연결

스프링은 빈 이름을 생성할 때 클래스 이름을 기반으로 하며, 따라서 @Qualifier에서 사용하는 문자열은 빈 이름 규칙에 따라 소문자로 시작해야 합니다.

3. 실제 예제: MessageMapper 인터페이스를 구현하는 여러 클래스

코드 예시를 통해 @Qualifier를 사용하여 여러 MessageMapper 구현체 중에서 명시적으로 특정 구현체를 선택하는 방법을 살펴봅니다.

3.1 MessageMapper 인터페이스 정의

import org.apache.ibatis.annotations.Mapper
import org.springframework.stereotype.Repository

@Repository
@Mapper
interface MessageMapper {
    fun createMessage()
    fun createMessageItem()
    fun createMessageItemFile()
}

3.2 여러 구현체 클래스 생성

@Repository
@Mapper
class MessageMapperImpl1 : MessageMapper {
    // 구현 내용
}

@Repository
@Mapper
class MessageMapperImpl2 : MessageMapper {
    // 구현 내용
}

3.3 @Qualifier를 사용한 명시적인 빈 선택

@Service
class MessageService(@Qualifier("messageMapperImpl1") private val messageMapper: MessageMapper) {
    @Transactional
    fun createMessage(): Long {
        return this.messageMapper.createMessage()
    }
}

4. 코드 예시 및 설명

여러 개의 MessageMapper 구현체가 있을 때, @Qualifier를 사용하여 특정한 빈을 주입하는 방법을 코드 예시를 통해 설명합니다.

4.1 MessageService 클래스에서의 @Qualifier 사용

@Service
class MessageService(@Qualifier("messageMapperImpl1") private val messageMapper: MessageMapper) {
    @Transactional
    fun createMessage(): Long {
        return this.messageMapper.createMessage()
    }
}

5. 결론

  • @Qualifier 어노테이션은 여러 후보 빈 중에서 명시적으로 선택하기 위한 강력한 도구입니다. 적절한 사용 시나리오를 파악하고 활용하는 것이 중요합니다.
  • 프로젝트가 확장될 가능성이 있는 경우, @Qualifier를 사용하여 빈을 명시적으로 선택함으로써 코드의 가독성을 높이고, 유지보수성과 확장성을 향상시킬 수 있습니다.
Comments