4. 스프링 빈과 의존관계
컴포넌트 스캔과 자동 의존관계 설정#
@Controller어노테이션으로 해당 클래스를 빈 객체화 시켜 스프링 컨테이너에 등록할 수 있음- 스프링 컨테이너에서 빈 객체들을 관리함
 @Service,@Repository도 마찬가지
- 지금까지는 객체를 생성하고 등록해주고 있었는데, 각 Controller, Service, Repository 를 빈화시켜 컨테이너에 등록할 수 있음
 
DI (Dependency Injenction)#
@Autowired 를 이용하면 스프링 컨테이너에 등록되어 있는 빈중 가장 적절한것을 자동으로 엮어줌
스프링에서 빈을 등록하는 2가지 방법#
- 컴포넌트 스캔과 자동의존 관계 설정
@Component어노테이션이 각 사용한 (like @Controller) 어노테이션에 붙어 있음- 해당 어노테이션을 사용하면 스프링 컨테이너에 등록됨
 - 이후 스프링 빈으로 등록하면 좋은점들을 설명해줄 예정
 
@Autowired로 의존관계
 - 자바 코드로 직접 스프링 빈 등록하기
 
@SpringBootApplication이 붙어있는 하위 패키지에서만 Component 스캔을 함.
기본적으로 스프링 컨테이너에 싱글톤으로 등록됨
자바 코드로 직접 스프링 빈 등록하기#
@Service, @Repository, @Autowired 어노테이션을 제거하고 진행
@ComponentScan 과 @Configuration 으로 직접 등록하는 방법의 차이#
- DI 에는
- 생성자 주입 (제일 권장, 실제 동적으로 의존관계를 변경할 일이 거의 없음)
 - 필드 주입: 별로 안좋음? 중간에 의존성을 바꿀 방법이 없음
 - setter 주입
 
 - 정형화되지 않거나, 상황에 따라 구현 클래스를 변경해야 하면 설정을 통해 변경해야함
- 자바 코드로 직접 스프링 빈 등록하는 법으로 바꾸기 가능
 
 @Autowired는 스프링 컨테이너에 등록된 빈에서만 작동함