요즘은 강의만 보고 있어서 내용 중 헷갈리는 걸 하나씩 정리해보려고 한다.
Bean이란?
- Spring에셔 관리하는 객체
- Bean이 생성되면 Ioc(servlet) container에 등록됨
- 등록되면 자동으로 객체 생성를 해줌(Chicken chicken = new Chicken();)
- 보통 기본값으로 설정이 되어 있음
- Spring 4.3 버젼 이후이고 생성자 선언이 1개 일 때는 @Autowired 생략 가능
Bean 등록 방법
- class명 위에 @Component 입력
-> 해당 class명이 Bean으로 들어감(전부 소문자)
- 등록 여부 확인
-> class명 옆에 커피콩 모양이 뜸

Bean 사용방법
- 필드나 메서드 위에 @Autowired 입력
- Bean을 주입한다고 함(=> 의존성(DI)을 주입)
-> Food food = new Food를 한 것처럼 메서드나 필드 사용 가능
필드에 Bean 주입
@Autowired
private MemoRepository memoRepository;
=> 사용 예시
void test1() {
memoRepository.test();
}
메서드에 Bean 주입
@Autowired
public MemoService(MemoRepository memoRepository) {
this.memoRepository = memoRepository;
}
Bean 2개 등록
-> Food를 인터이스로 두고 두개의 클래스에 implements 을 걸어 Test 클래스에서 사용
* pizza class 에시
@Component
public class Pizza{
public void eat() {
System.out.println("피자를 먹습니다.");
}
}
- @Component을 한 class가 Pizza, Chicken 두 개 있는 경우
-> 원래는 2번째 줄이 Food food 이나 Food의 Bean이 두개이니 사용하려는 Bean의 이름을 명시해야함
@Autowired
Food pizza;
pizza.eat();
- Pizza, Chicken 중 하나에 @Primary 을 명시
-> @Primary : Bean이 여러개 있는 경우 Primary 가 있는 Bean을 우선적으로 사용
* Chicken class
@Component
@Primary
Food food;
food.eat();
- class에 @Qualifier 에너테이션을 사용하여 이름을 명시, Test class에서 명시된 이름을 가져옴
*Pizza
@Component
@Qualifier("pizza")
* Test
@Autowired
@Qualifier("pizza")
Food food;
food.eat();
★ Primary와 Qualifier
- Primary : 많이 호출하는 객체
- Qualifier : 덜 호출되어 따로 표기를 하는 객체