DevBoi

@AutoWired 사용 이유, 의존성 개념 본문

Develop/[Spring]

@AutoWired 사용 이유, 의존성 개념

HiSmith 2021. 6. 4. 01:32
반응형

우연히 프로젝트 하다가, 스프링 버전을 높였다.

1버전에서 3버전대로....

그래서 어노테이션을 사용하다가, 문득 사용하고있는 @AutoWired 에 대해 탐구....

 

스프링 핵심 기술중 하나인... @AutoWired 에 대해서 포스팅...

 

1.필드 injection

 

우선 @AutoWired 는 인터페이스 관련 선언할때 재 구현한 녀석을 주입해주는 어노테이션이다.

예를 들어서 PromotionService  interface를 사용하는 PromotionServiceImpl 이 있다고 치자.

 

@AutoWired

PromotionService promotionservice

 

이렇게 쓰게 되면, promotionservice 변수에는 PromotionService 인터페이스를 재정의한 impl 파일에 대한 변수를 생성해 주는 것이다.

 

이렇게 되면 저 promotionservice.메소드는 PromotionServiceImpl 기준으로 구현한 것들을 쓸수 있다고한다.

 

예를 들면, PromotionSerivceImpl 에 getTotalCount 라는 메소드를 선언했다고 치면

 

@AutoWired

PromotionService promotionservice

 

int num = promotionservice.getTotalCount();

 

이런식으로 쓸수있다는 것이다.

 

 

 

(단점 : final 로 선언 불가, 객체 변할수 있음, 순환 참조 기동시에 발견 불가

 

 

2. 생성자 injection

가장 많은.. 추천 방법 , 필드 injection 에서 해소못한 것들을 단점들을 장점으로 바꿔버림

 

생성자가 1개일때 @AutoWired 생략 가능, 2개이상부터는 써야함(생략도 4버전 대부터가능) + 변수 final 가능

 

final PromotionService promotionservice

 

public PromotionController(PromotionService promotionservice)

{

this.promotionservice = promotionservice;

}

 

요런식으로 하면, 누가 실수로라도, 저기 service 변수에 null로 하는거 불가능하다.

즉 불변하다.

 

 

 

오우, 글만 쓰니까 너무 지저분하다. 

담엔 프로젝트 띄워서 차근차근 천천히 진행해봐야겠다. 우선 이론 개념은 여기까지...

반응형