Everyday Dev System

같은 타입의 Bean 객체 활용하기 본문

내배캠 주요 학습/Spring 숙련

같은 타입의 Bean 객체 활용하기

chaeyoung- 2023. 6. 19. 16:25

 

같은 타입의 Bean 객체 활용하기

bean 객체를 반환하는 메서드 위에 @Bean을 기재
해당 메서드가 들어가 있는 클래스 위에 @Configuration을 기재
이렇게 하면 IoC Conatiner에 bean으로 저장됨.
-> bean 명칭은 클래스명에 맨앞에가 소문자로 바뀐 이름으로 저장된다.

Pizza.java

package com.sparta.springauth.food;

import org.springframework.stereotype.Component;

@Component
public class Pizza implements Food {
    @Override
    public void eat() {
        System.out.println("피자를 먹습니다.");
    }
}

Chicken.java

package com.sparta.springauth.food;

import org.springframework.stereotype.Component;

@Component
public class Chicken implements Food {
    @Override
    public void eat() {
        System.out.println("치킨을 먹습니다.");
    }
}

Food.java

package com.sparta.springauth.food;

public interface Food {
    void eat();
}

Food라는 인터페이스 타입으로 Bean이 등록되었다는 의미이다.

 

같은 타입으로 두개의 구현체를 만들어서 Bean으로 등록한다.

 

이때 주의할 점은, Test 코드에서 자동주입으로 하려고 하면 오류가 난다.

왜냐하면 Food 타입의 Bean을 등록하는데 pizza인지 chicken인지 모르기 때문에 오류가 나는 것이다.

 

 

해결방법 3가지

 

1. 등록이 된 Bean의 이름을 명시 

 

 

2. 구현체의 클래스에 @Primary를 기재. 

같은 타입의 Bean이 여러개 있어도 @Primary가 기재되어 있는 Bean 객체를 주입.

 

 

3. @Qualifier(" ")기재

- @Primary 보다 우선순위가 높다.

 

좁은 범위의 설정일 경우 그것이 우선순위가 높은 경우가 많음.

같은 Bean 타입의 객체를 활용할 때에, 

범용적으로 사용되는 Bean 객체에는 @Primary를,
지역적으로 사용되는 Bean 객체에는 @Qualifier(" ")를 사용한다.

왜냐하면 @Qualifier가 @Primary 보다 우선순위가 높기 때문이다.

'내배캠 주요 학습 > Spring 숙련' 카테고리의 다른 글

Spring 에서 Filter란?  (0) 2023.06.20
로그인 구현하기  (0) 2023.06.19
회원가입 구현하기  (0) 2023.06.19
JWT version 0.11.5  (0) 2023.06.19
인증 - 쿠키와 세션  (1) 2023.06.19