본문 바로가기

Spring

의존성 주입(Dependency Injection) 3가지 방법, @Autowired 란?

스프링에는 다양한 의존주입 방법이 있습니다.

대표적으로 생성자 주입, setter 주입, 필드 주입 이렇게 3가지가 있습니다.

 

1. 생성자 주입

스프링 컨테이너가 올라오고 어플리케이션이 setting이 되는 시점에 생성자 주입을 통해 한번만 호출되는 것이 보장되어 '불변, 필수' 의존관계에서 사용됩니다.

  • 대부분의 의존관계 주입은 한번 설정이 되고 나면 의존관계를 변경할 일이 없습니다.

2. setter 주입

set이 public하게 노출이 될 경우 setter가 실행되어 변경될수있는 문제점이 있습니다.

하지만, 변경 가능성이 있는 의존관계에서는 사용할 필요가 있습니다.

3. 필드 주입

필드에 @Autowired 어노테이션을 붙이는 방법입니다. 중간에 외부에서 변경이 불가능하기 때문에 테스트하기 힘들다는 단점이 있습니다.

 

//필드 주입
@Autowired private final MemberService memberService;

// 생성자 주입
@Autowired
public void MemberController(MemberService memberService){
	this.memberService = memberService;
}

// setter 주입
@Autowired
public void setMemberService(MemberService memberService){
	this.memberService = memberService;
}

 

DI 에 있어서 생성자 주입 방식을 권장합니다!

 

@Autowired 란?

필요한 의존 객체의 "타입"에 해당하는 빈을 찾아서 주입해주는 것입니다.

  • 생성자, setter, 필드에 autowired 어노테이션을 사용할 수 있습니다.
  • IoC컨테이너가 빈으로 등록을 해주기때문에, 빈으로 등록되어있는것들은 autowired로 꺼낼수있습니다. 그렇기 때문에 applicationcontext 도 꺼낼수 있습니다!