
의존성 주입 방법 3가지
@Autowired ; 컨테이너에 든 자료 중 Chef에 대입할 수 있는 걸 ‘전부’ 집어넣어라.
@Component ; 스프링 컨테이너(힙)에 자동으로 넣음
@Qualifier ; 여러 개의 빈이 등록되었을 때, 어떤 빈을 선택할 지 정함
**@Component**("fs")
public class FusionRestaurant implements Restaurant {
**@Autowired**
private Chef chef;
**@Autowired**
private Course course;
세터 주입 : 객체의 세터 메서드 위에 어노테이션 ,변경 사항이 있을 때 사용한다.
세터에서 @Qualifier 를 사용하는 경우, 디폴트 생성자가 오버로딩 되어있어야 한다.
@Autowired
public void setChef(@Qualifier("jc") Chef chef) {
this.chef = chef;
}
@Autowired
public void setCourse(@Qualifier("jco") Course course) {
this.course = course;
}
생성자 주입 : 생성자 위에 어노테이션 , 주로 많이 씀
‘객체 생성 시점’에 주입하여 NullPointerException 문제가 발생할 확률이 적고 안전하다.
중간에 바꿔야 할 게 없을 때 사용한다.
@Autowired
public Hotel(Restaurant restaurant,Chef chef) {
this.restaurant = restaurant;
this.chef = chef;
}
그래서 이거 왜 쓰는가???
소스코드를 짠 후, ‘빌드’라는 과정을 거쳐 배포할 수 있는 형태로 배포파일을 만든다. (코드는 숨김)
예를 들어, 쇼핑몰을 만들었을 때, DB 연결은 알아서 하라고 하는 형식의 서비스가 있다. (원래 MySql 연동됨)
그런데, 클라이언트가 오라클을 쓴다고 해서 코드에 오라클 적합 코드로 고친 다음 재빌드 해야 한다.
→ 다른 자료형이 와도 바로 고칠 수 있도록 범용성 좋게 만들자