@Autowired, @Qualifier, @Primary

jylee·2023년 6월 16일
0

그냥생각나는거

목록 보기
6/48

@Autowired 필드 명 매칭

  1. 타입 매칭을 시도
  2. 여러 빈이 있으면 필드 이름, 파라미터 이름으로 빈 이름을 추가 매칭

@Qualifier

빈 등록시 @Qualifier를 붙여 준다.

@Component
@Qualifier("mainDiscountPolicy")
public class RateDiscountPolicy implements DiscountPolicy {}
@Component
@Qualifier("fixDiscountPolicy")
public class FixDiscountPolicy implements DiscountPolicy {}

주입시에 @Qualifier를 붙여주고 등록한 이름을 적어준다.

생성자 자동 주입 예시

@Autowired
public OrderServiceImpl(MemberRepository memberRepository,
	@Qualifier("mainDiscountPolicy") DiscountPolicy discountPolicy) {
    	this.memberRepository = memberRepository;
        this.discountPolicy = discountPolicy;
}

수정자 자동 주입 예시

@Autowired
public DiscountPolicy setDiscountPolicy(
	@Qualifier("mainDiscountPolicy") DiscountPolicy discountPolicy) {
    	this.discountPolicy = discountPolicy;
}

직접 빈 등록시에도 @Qualifier를 동일하게 사용할 수 있다.

@Bean
@Qualifier("mainDiscountPolicy")
public DiscountPolicy discountPolicy() {
	return new ...
}

@Primary 사용

@Primary는 우선순위를 정하는 방법
@Autowired 시에 여러 빈이 매칭되면 @Primary 가 우선권을 가진다.

@Primary, @Qualifier 활용

  1. 코드에서 자주 사용하는 메인 데이터베이스의 커넥션을 획득하는 스프링 빈
  2. 코드에서 특별한 기능으로 가끔 사용하는 서브 데이터베이스의 커넥션을 획득하는 스프링 빈

1 -> @Primary를 적용해서 조회하는 곳에서 @Qualifier 지정 없이 편리하게 조회
2 -> 서브 데이터베이스 커넥션 빈을 획득할 때는 @Qualifier를 지정해서 명시적으로 획득

profile
ㅎㅇ

0개의 댓글