3장: 의존성 주입
3장의 주요 내용을 요약한다.
이제까지 하나의 빈이 다른 빈을 참조하기 위해서 getBean()이라는 메소드를 사용했다. 그러나 실제로는 컨텍스트에서 필요한 인스턴스를 제공해주도록 요청하는 방식으로 가야한다. 컨텍스트에 인스턴스들을 추가한다음, 이들 간에 의존관계를 설정하기 위해서 크게 2가지 방법이 있다.
구성파일 내부에서 의존성 설정

이처럼 구성클래스 안에서 원하는 Bean의 메소드를 호출하면서 의존성을 실현할 수 있다.
저 코드 대로라면 인스턴스가 2개 생성되는거 아니냐?
아니다. spring은 컨텍스트를 확인해서 이미 존재하는 인스턴스에 대해서는 다시 불러온다. 없는 참조에 대해서는 새롭게 생성하지만 이미 존재한다면 불러온다.

또는 이처럼 매개변수로 받아서 의존성을 설정할수도 있다. 이처럼 객체간 의존성을 애플리케이션 내부가 아닌 외부에서 주입하는 것을 DI(Dependency Injection)이라고 한다.
@Autowired 사용해서 의존성 주입
보통 Autowired는 stereotype annotation이랑 같이 많이 쓰인다.
클래스 필드 이용 -> final 선언 불가
생성자 이용
setter 이용 -> 거의 안 쓰임
순환의존성이란? 두 개 이상의 객체가 생성 시 서로에게 의존하는 상황. 클래스 설계가 잘못되었음을 의미한다.
Context에서 같은 타입의 여러 개의 객체들이 존재한다면? @Primary로 Default Bean을 만들어주거나 @Qualifier로 이름을 통해 Bean을 불러올 수 있다.
Last updated