A가 B에 의존한다는 것은 B에 어떠한 변경이 발생했을 때 A에도 영향이 미치는 것을 의미한다. 따라서 의존관계를 느슨하게 맺어서 각 객체 간의 결합도를 낮춰야 한다.
Spring에서는 DI(Dependency Injection)을 통해 결합도를 낮출 수 있다.
의존성 주입 방식에는 생성자 주입, 멤버 필드 주입, setter 메소드 주입이 있다.
생성자 주입 방식
@Service(value = "gservice")
public class GuestBookServiceImpl implements GuestBookService {
private fianl GuestBookDao guestBookDao;
@Autowired
public GuestBookServiceImpl(GuestBookDao guestBookDao) {
this.guestBookDao = guestBookDao;
}
}
특징 :
- 필수적으로 사용해야 하는 레퍼런스 없이는 인스턴스를 만들지 못하도록 강제한다.
- 순환 참조 의존성이 발생할 경우 생성자 주입만으로는 해결할 수 없으므로 순환참조 발생을 알아차릴 수 있다.
- field를 final로 선언 가능하여 객체가 변하는 것을 방지할 수 있다.
멤버 필드 주입 방식
@Service(value = "gservice")
public class GuestBookServiceImpl implements GuestBookService {
@Autowired
private GuestBookDao guestBookDao;
}
특징 :
- 가장 간단하게 선언할 수 있다.
- 의존 관계가 눈에 잘 보이지 않아 추상적이다.
- 의존성 대상 field를 final로 선언할 수 없다.
필드 주입 방식은 선호되지 않는 방식이라 지양한다.
Setter 메소드 주입
@Service(value = "gservice")
public class GuestBookServiceImpl implements GuestBookService {
private GuestBookDao guestBookDao;
@Autowired
public void setGuestBookDao(GuestBookDao guestBookDao){
this.guestBookDao = guestBookDao;
}
}
특징 :
- 의존성이 선택적으로 필요할 때 사용한다
- 의존성 대상 field를 final로 선언할 수 없다.
'Study > Spring Framework' 카테고리의 다른 글
[Spring] AOP(Aspect Oriented Programming) (0) | 2021.04.29 |
---|