[BE Study] Day5,6 Controller 분리하기/ Spring Container, Bean

🍫 5일차 과제
public class Main {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
System.out.print("숫자를 입력하세요 : ");
int a = sc.nextInt(); // 주사위를 던진 횟수
System.out.print("주사위 면의 개수를 입력하게요 : ");
int b = sc.nextInt();
int[] result = new int[b];
for (int i = 0; i < a; i++) {
int c = (int) (Math.random() * b);
result[c]++;
}
for (int i = 0; i < b; i++) {
System.out.println(i + 1 + "은 " + result[i] + "번 나왔습니다.");
}
}
}
■스프링 빈이란?
서버가 시작되면, 스프링 서버 내부에 거대한 컨테이너(상자)를 만든다!
이 컨테이너 안에는 클래스가 들어간다. 이때 다양한 정보와 함께 인스턴스화가 이루어진다.
1. 스프링 컨테이너(클래스 저장소)가 시작
2. 많은 스프링 빈(기본)들이 등록.
3. 우리가 설정한 스프링 빈이 등록

@Primary : 우선권을 설정하는 어노테이션
■ 빈을 등록하는 방법
@Configuration
- 클래스에 붙이는 어노테이션
- @Bean을 사용할 때 함께 사용해 주어야 한다!
@Bean
- 메소드에 붙이는 어노테이션
- 메소드에 반환되는 객체를 스프링 빈에 등록한다.
@Component(@Service, @RestController, @Repository)
- 주어진 클래스를 '컴포넌트'로 간주한다.
- 이 클래스들은 스프링 서버가 뜰 때 자동으로 감지된다.
- Controller, Service, Repository가 아닌 개발자가 직접 작성한 클래스를 스프링 빈으로 등록할때 사용
■ 빈을 주입받는 방법
1. 생성자를 통해 주입받는 방식!(권장)
2. Setter사용 : 누군가 setter를 사용하면 오작동
3. 필드에 사용 : 테스트가 어려움
■ @Qualifier
여러 후보군이 있을때 특정 클래스를 지정하여 가져오게 할 수 있다.
1. 직접 @Qualifier("클래스명")로 호출하기
2. 클래스에 @Qualifier("빈 이름") 작성 후 이름으로 호출하기

@Primary vs @Qualifier → Qualifier
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인
Java와 Spring Boot, JPA, MySQL, AWS를 이용해 서버를 개발하고 배포합니다. 웹 애플리케이션을 개발하며 서버 개발에 필요한 배경지식과 이론, 다양한 기술들을 모두 학습할 뿐 아니라, 다양한 옵션들
www.inflearn.com