일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- reactive
- 공유기 서버
- Spring Framework
- 웹 스터디
- reactor core
- 웹앱
- 서버운영
- ipTIME
- 웹 커리큘럼
- Spring Batch
- spring reactive
- reactor
- Today
- Total
Hello World
@Autowired, @Resource, @Inject의 차이 본문
@Autowired, @Resource, @Inject의 차이
이번에 소개하는 세가지 어노테이션 @Autowired, @Resource,@Inject은 모두 의존관계를 자동으로 연결해주는 기능을 가진 어노테이션입니다. 다만 조금씩의 차이가 있습니다.
| @Autowired | @Inject | @Resource |
범용 | 스프링 전용 | 자바에서 지원 | 자바에서 지원 |
연결방식 | 타입에 맞춰서 연결 | 타입에 맞춰서 연결 | 이름으로 연결 |
자세한 설명을 하자면, @Inject와 @Resource는 JSR에 실려있는 자바 기존의 어노테이션입니다. 반면 @Autowired의 경우에는 스프링에서 등장한 어노테이션입니다. 따라서 스프링 이외에서는 사용 할 수 없습니다. 만약에 프로젝트를 스프링에서 다른 프레임워크로 바꿀 생각이 있으시다면 @Autowired보단 @Inject나 @Resource를 쓰시면 됩니다. 다만 이런 경우는 거의 없다고 봅니다.
또한 연결 방식은 @Autowired와 @Inject는 타입에 맞춰서 하는 반면, @Resource는 이름에 맞춰서 연결하게 됩니다. 예를 들어보겠습니다.
Bird 인터페이스를 상속하는 Chicken과 Penguin 이라는 클래스가 있다고 합시다.
Chicken과 Penguin 클래스를 연결할 것이므로 @Component로 빈에 등록해주었습니다.
public class Bird{} @Component public class Chicken implements Bird{} @Component public class Penguin implements Bird{} |
그리고 다음과 같이 연결해봅시다.
@Autowired private Chicken penguin; //Chicken 타입으로 연결됩니다.
@Inject private Penguin chicken; //Penguin 타입으로 연결됩니다.
@Resource private Chicken penguin; //penguin 타입으로 연결됩니다만, Chicken 클래스를 자료형으로 두었기에 캐스팅이 되지 않아 에러가 납니다
@Resource private Bird penguin; //penguin 타입으로 연결되어 호출해보면 penguin 클래스의 값을 호출하는 것을 볼 수 있습니다. |
@Autowired와 @Inject의 경우에도 @Qualifier 어노테이션을 사용하면, 타입 이외의 방법으로도 연결 할 수 있습니다.
@Autowired @Qualifier("chicken") pirvate Brid penguin; |
위와 같이 쓰면 이름에 상관없이 Chicken 타입으로 연결되는 것을 알 수 있습니다. 이렇게 @Qualifer와 함께 쓰면 더욱 강력한 기능을 쓸 수 있는 장점이 있습니다.
[출처] [Spring] @Autowired, @Resource, Inject의 차이|작성자 심해펭귄
http://blog.naver.com/platinasnow/220053030295
'Spring > 3.x' 카테고리의 다른 글
객체 검증의 종결자 @Valid (0) | 2017.02.10 |
---|---|
[jackson] ObjectMapper를 이용하여 java object를 json 문자열로 변환하기 (0) | 2016.05.17 |
JSTL 에서 MAP 접근, 출력 (KEY로 바로 값 추출) (0) | 2016.05.17 |
Mybatis #과 $의 차이 (0) | 2016.05.12 |
@Schedule Spring 스프링 스케쥴 설정법 & CronTab (0) | 2016.05.11 |