빈을 정의하는 것을 넘어, 빈과 빈 사이의 관계를 설정하는 와이어링(Wiring)과 의존성 주입(Dependency Injection)에 대해 정리했습니다.
구성 클래스(@Configuration) 내에서 빈 사이의 관계를 맺어주는 방법입니다.
@Bean 메서드에서 다른 @Bean 메서드를 직접 호출합니다. 스프링은 컨테이너에 이미 해당 빈이 있다면 새로 생성하지 않고 기존 빈을 반환합니다.가장 많이 쓰이는 의존성 주입 방법들입니다.
@Autowired를 붙입니다.final로 선언할 수 없어 객체 변경이 가능해지며, 유지보수와 테스트가 어렵습니다.final로 선언할 수 있어 불변성을 보장합니다. 클래스에 생성자가 하나뿐이라면 @Autowired를 생략할 수 있습니다.@Autowired를 붙입니다. 상황에 따라 의존성을 선택적으로 주입해야 할 때 사용합니다.동일한 타입을 가진 빈이 여러 개일 때, 스프링은 어떤 빈을 주입해야 할지 고민에 빠집니다. 이때 해결 방법 3가지입니다.
@Qualifier 사용: 명시적으로 어떤 빈을 사용할지 이름을 지정합니다.public Person person(@Qualifier("parrot2") Parrot parrot) {
p.setParrot(parrot);
}의존성 주입은 객체 간의 결합도를 낮춰준다.
가능하면 생성자 주입을 사용하여 객체의 안정성을 높이자.
같은 타입의 빈이 여러 개라면 @Qualifier나 @Primary로 명확하게 지시하자.
#Spring #DependencyInjection #Autowired #ConstructorInjection #백엔드공부