Spring 05 어노테이션을 사용한 의존성 주입❗(중요)

Kang.__.Mingu·2024년 9월 7일

Spring

목록 보기
4/21

어노테이션을 사용한 의존성 주입을 하기 전에 Spring Container에 클래스에서 사용된 스프링 어노테이션을 검색해 처리할 수 있도록 해줘야 한다.

<beans>
	<context:component-scan base-package="xyz.itwill05.di"/>
</beans

기억이 안난다면 링크 클릭❗
Spring 03 Annotation

@Component

  • 클래스를 스프링 컨테이너가 관리할 수 있는 Spring Bean으로 등록하기 위한 어노테이션

  • 클래스의 이름이 자동으로 식별자(beanName)으로 설정

    • 클래스명의 첫문자는 소문자로 변환

    • @Component 어노테이션의 value 속성을 사용하여 beanName 변경 가능

@Primary

  • Spring에서 의존성 주입 시 여러 개의 후보 Bean이 있을 때 우선순위를 지정하여 기본으로 선택될 Bean을 지정하는데 사용하는 어노테이션

@Qualifier

  • @Primary는 기본 Bean을 지정하는 방법이지만, 특정한 Bean을 명확히 지정하고 싶을 때는 @Qualifier를 사용

  • @Qualifier는 이름을 기반으로 주입할 Bean을 지정하는 방식

  • 필드에 저장될 객체를 직접 지정하여 의존성 주입을 하기 위한 어노테이션

  • @Autowired 어노테이션에 종속된 어노테이션

@Repository

  • DAO 클래스(Repository 클래스)를 스프링 컨테이너가 관리할 수 있는 Spring Bean으로 등록하기 위한어노테이션

  • 클래스의 이름을 자동으로 식별자(beanName)으로 사용하지만 value 속성을 사용해 변경 가능

  • 트랜잭션 관리자에 의해 클래스의 메소드에 문제가 발생될 경우 롤백 처리 가능

@Service

  • Service 클래스를 스프링 컨테이너가 관리할 수 있는 Spring Bean으로 등록하기 위한 어노테이션

  • @Component,@Repository와 같이 value 속성을 사용해 식별자(beanName) 변경 가능

  • 예외가 발생될 경우 ExceptionHandler를 사용해 예외 처리 가능

@Autowired

  • 스프링 컨테이너로부터 Spring Bean으로 등록된 클래스의 객체를 제공받아 필드에 자동으로 저장되게 의존성 주입하기 위한 어노테이션

  • 클래스의 필드에 @Autowired 어노테이션을 사용하여 의존 성 주입 - 필드 레벨의 의존성 주입

    • 필드가 여러 개 작성된 경우 필드마다 @Autowired 어노테이션을 사용해 의존성 주입
    • bean 엘리먼트의 autowire 속성값을 [byType]으로 설정한 경우 같은 방법으로 의존성 주입
    • Setter Injection 기능을 사용하지만 필드의 Setter 메소드가 없어도 의존성 주입 가능

문제점

필드의 자료형이 인터페이스인 경우 인터페이스를 상속받은 자식클래스가 Spring Bean으로 2개 이상 등록된 경우 의존성 주입 실패하여 예외를 발생한다.

해결법

  1. 의존성 주입하고자 하는 클래스의 식별자(beanName)을 필드명과 동일하게 변경

    • @Autowired 어노테이션은 동일한 자료형의 Spring Bean이 려어개인 경우 autowire 속성값을 [byName]으로 설정한 경우 같은 방법으로 의존성 주입
  2. 의존성 주입하고자 하는 클래스에 @Primary 어노테이션 사용

  3. 의존성 주입을 위한 필드에 @Qualifier 어노테이션 사용

profile
최선을 다해 꾸준히 노력하는 개발자 망고입니당 :D

0개의 댓글