[Spring] 의존성 주입 애노테이션 정리 - @Autowired, @Resource, @Inject
[Spring] 의존성 주입 애노테이션 정리 - @Autowired, @Resource, @Inject
1. @Autowired
@Autowired는 주입하려고 하는 객체의 타입이 일치하는 객체를 자동으로 주입한다.
@Autowired는 필드, 생성자, Setter에 붙일 수 있다.
단, @Autowired를 필드, Setter에 붙여서 사용할 경우 반드시 기본 생성자가 정의되어 있어야 한다.
1) @Autowired - 필드 주입
public class WordRegisterServiceUseAutowired {
@Autowired
private WordDao wordDao;
public WordRegisterServiceUseAutowired() { }
}
2) @Autowired - 생성자 주입
public class WordRegisterServiceUseAutowired {
private WordDao wordDao;
@Autowired
public WordRegisterServiceUseAutowired(WordDao wordDao) {
this.wordDao = wordDao;
}
}
3) @Autowired - Setter 주입
public class WordRegisterServiceUseAutowired {
private WordDao wordDao;
public WordRegisterServiceUseAutowired() { }
@Autowired
public void setWordDao(WordDao wordDao) {
this.wordDao = wordDao;
}
}
4) @Qualifier 애노테이션
XML 설정 파일
<bean id="wordDao1" class="com.word.dao.WordDao" >
<qualifier value="usedDao"/>
</bean>
<bean id="wordDao2" class="com.word.dao.WordDao" />
<bean id="wordDao3" class="com.word.dao.WordDao" />
위와 같이 동일한 타입의 빈 객체가 여러개 정의되어 있을 경우 우선적으로 사용할 빈 객체의 <bean> 태그 하위에 <qualifier> 태그를 설정한다.
자바 코드
public class WordRegisterServiceUseAutowired {
@Autowired
@Qualifier("usedDao")
private WordDao wordDao;
public WordRegisterServiceUseAutowired() { }
}
그리고 자바 코드에서는 @Autowired와 함께 @Qualifier를 사용해서 @Qualifier에 XML 설정 파일에서 설정한 <qualifier> 태그의 value 값을 지정해준다.
이렇게 하면 동일한 타입의 빈이 여러 개일 경우 우선적으로 특정 빈이 주입된다.
2. @Resource
@Resource는 주입하려고 하는 객체의 이름(id)이 일치하는 객체를 자동으로 주입한다.
@Resource는 Java 제공 애노테이션이며 필드, Setter에 붙일 수 있다. 생성자에는 붙일 수 없다.
@Autowired와 마찬가지로 반드시 기본 생성자가 정의되어 있어야 한다.
1) 의존성 설정
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
프로젝트에서 사용하기 위해 javax.annotation-api 의존성을 추가한다.
2) @Resource - 필드 주입
import javax.annotation.Resource;
public class WordRegisterServiceUseResource {
@Resource
private WordDao wordDao;
public WordRegisterServiceUseResource() { }
}
3) @Resource - Setter 주입
import javax.annotation.Resource;
public class WordRegisterServiceUseResource {
private WordDao wordDao;
public WordRegisterServiceUseResource() { }
@Resource
public WordRegisterServiceUseResource(WordDao wordDao) {
this.wordDao = wordDao;
}
}
3. @Inject
@Inject는 @Autowired와 유사하게 주입하려고 하는 객체의 타입이 일치하는 객체를 자동으로 주입한다.
@Resource는 Java 제공 애노테이션이며 필드, 생성자, Setter에 붙일 수 있다.
@Autowired와 마찬가지로 필드, Setter에 사용할 경우 반드시 기본 생성자가 정의되어 있어야 한다.
1) 의존성 설정
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
프로젝트에서 사용하기 위해 javax.inject 의존성을 추가한다.
2) @Inject - 필드 주입
import javax.inject.Inject;
public class WordRegisterServiceUseAutowired {
@Inject
private WordDao wordDao;
public WordRegisterServiceUseAutowired() { }
}
3) @Inject - 생성자 주입
import javax.inject.Inject;
public class WordRegisterServiceUseAutowired {
private WordDao wordDao;
@Inject
public WordRegisterServiceUseAutowired(WordDao wordDao) {
this.wordDao = wordDao;
}
}
4) @Inject - Setter 주입
import javax.inject.Inject;
public class WordRegisterServiceUseAutowired {
private WordDao wordDao;
public WordRegisterServiceUseAutowired() { }
@Inject
public void setWordDao(WordDao wordDao) {
this.wordDao = wordDao;
}
}
5) @Named 애노테이션
@Autowired의 @Qualifier와 같이 사용할 수 있는 것이 @Inject에서는 @Named이다.
@Qualifier와 달리 @Named에는 빈 이름(id)를 지정하므로 @Autowired, @Qualifier를 사용할때에 비해 XML 설정 파일이 다소 짧아진다는 특징이 있다.
XML 설정 파일
<bean id="wordDao1" class="com.word.dao.WordDao"/>
<bean id="wordDao2" class="com.word.dao.WordDao"/>
<bean id="wordDao3" class="com.word.dao.WordDao"/>
<Qualifier> 태그가 필요한 @Qualifier와 달리 @Named는 XML 설정 파일에 추가적으로 설정할 것이 없다.
자바 코드
import javax.inject.Inject;
import javax.inject.Named;
public class WordRegisterServiceUseInject {
@Inject
@Named("wordDao1")
private WordDao wordDao;
public WordRegisterServiceUseInject() {
}
}
@Named에 빈 이름(id)를 지정한다.
'Spring Framework > Spring Core' 카테고리의 다른 글
[Spring] @Component 애노테이션 및 함께 사용하는 애노테이션 정리 (0) | 2021.04.22 |
---|---|
[Spring] 애노테이션을 이용한 빈 설정 방법 정리 (0) | 2021.04.22 |
[Spring] 스프링 XML 설정 → 애노테이션 설정 변환 방법 (0) | 2021.04.22 |
[Spring] 스프링 빈(Bean) 초기화, 소멸 시 특정 작업을 하는 방법 (0) | 2021.04.22 |
[Spring] 스프링 XML 설정 파일 작성 방법 정리 (0) | 2021.04.22 |
Servlet에서 스프링 ApplicationContext 사용하기 (0) | 2021.04.22 |
[Spring] SpEL - Spring Expression Language (0) | 2021.04.22 |
[Spring] 데이터 바인딩 - PropertyEditor, Converter 그리고 Formatter (0) | 2021.04.22 |