2020. 9. 2. 01:18ㆍ개발공부/Spring
#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;
'개발공부 > Spring' 카테고리의 다른 글
[Spring] - MVC2 구조 구현 (0) | 2020.09.03 |
---|---|
[Spring] - Spring MVC 개발환경 설정 (0) | 2020.09.02 |
[Spring] - DI(Dependency Injection) (복습) (0) | 2020.08.31 |
[Spring] - Maven 방식 이해하기 (복습) (0) | 2020.08.26 |
Spring - 입력값 처리 @GetMapping (0) | 2020.08.25 |