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
는 스프링 컨테이너에 등록된 빈에서만 작동함