[Spring] - DI _자동 객체 주입(@; Annotation)

2020. 9. 2. 01:18개발공부/Spring

728x90

#Spring #DI #자동 객체 주입

지난 시간에 이어 자동 객체 주입을 끝으로 Spring 특성: DI(Dependency Injection)은 마무리 됐다. 핵심은 의존 객체 주입 시 타입을 자동으로 읽어 container에서 동일 타입은 객체를 자동으로 주입해주는 기능이며 @Autowired, @Qualifier, @Resource, @Inject 4가지 Annotation(아노테이션)을 사용해 구현한다.

1. @Autowired

일전 10만원 주고 끊어둔 패캠 REST-API 웹 구현 강좌에서 뭣도 모른 채 써 본 아노테이션이다. 사용성이 높다. 생성자, 필드(전역변수), 메서드에 갖다 붙여주면 끝. 원리는 DI를 인지하고 container로 이동해 생성된 <bean> 객체 중 동일 타입을 골라 자동으로 의존 객체를 주입시켜 구동시킨다. 

클래스 내 의존 객체가 다수라면  매개변수에 의존 객체들을 넣은 생성자를 만들어 아노테이션을 붙이면 한 큐에 자동 주입된다. 

같은 타입의 <bean>이 2개 이상 있을 경우 에러가 뜬다. 이를 보완해주는 아노테이션이 존재하며 2번에서 설명할 @Qualifier이다. 두 가지를 통합한 @Resource도 있지만, 사용성이 떨어진다. 

2. @Qualifier

@Autowired와 같이 쓴다. 단독으로 사용되진 않는다. 동 타입 <Bean>이 2개 이상있을 때 주입할 객체를 "[id]"로 특정해주는 기능을 가진다. 기본 생성자가 반드시 필요하고, 없으면 에러난다.

@Autowired
@Qualifier("paper1")
private Paper paper;

3. 기타

@Inject == @Autowired : 추가 라이브러리 사용가능하다. 거의 안쓴다.

@Resource : 1번에서 언급했듯이 @Autowired + @Qualifier 통합된 기능을 가졌음에도 잘 쓰이지 않는다. Java 8까지 지원하며 9버전부턴 없다. 

@Resource(name = "paper1")
private Paper paper;