반응형

생성자 주입(Constructor Injection)

 

스프링에서 가장 권장하는 방식입니다. 단일 생성자인 경우에는 @Autowired 어노테이션을 붙이지 않아도 되지만 생성자가 2개 이상인 경우에는 생성자에 어노테이션을 붙여야 합니다.

 

@Controller
public class MemberController {

    private final MemberService memberService;
    
    public MemberController(MemberService memberService) {
        
        this.memberService = memberService;

    }
}

 

필드 주입(Field Injection)

 

의존성을 주입할 필드에 @Autowired 어노테이션을 붙이면 자동으로 의존성이 주입됩니다.

 

@Controller
public class MemberController {

    @Autowired
    private final MemberService memberService;
    
}

 

수정자 주입(Setter Injection)

 

Setter 네이밍 패턴을 따르는 메소드를 이용한 주입입니다. 반드시 Setter 메소드일 필요는 없으나 동일한 기능을 수행해야 하며, 일관성 있는 코드 설계를 위해 Setter 네이밍 패턴을 사용하는 것이 권장됩니다.

 

public class MemberController {

    private MemberService memberService;
    
    @Autowired
    public void setMemberService(MemberService memberService) {
    
        this.memberService = memberService;
        
    }

}

 

생성자 주입이 가장 권장되는 이유

 

인텔리제이에서 필드 주입 혹은 생성자 주입을 하면 @Autowired 어노테이션에 노란줄과 함께 경고 메시지가 나옵니다. 어노테이션만으로도 간단하게 주입할 수 있는데 생성자 주입이 가장 권장되는 이유는 개발을 할 때 여러 컴포넌트 간에 의존성이 생기고 순환 참조가 발생하는 경우 서로를 참조하게 되어 오류가 발생할 수 있는데 필드 주입과 생성자 주입은 이런 순환 참조의 문제가 발생하였을 때 어플리케이션 동작 초기에 알 수가 없습니다. 하지만 생성자 주입을 사용하는 경우, 순환 참조가 있을 시 어플리케이션이 구동조차 되지 않기 때문에 발생할 오류를 사전에 알 수 있습니다.

반응형

+ Recent posts