본문 바로가기
JAVA & Spring

[ Spring ] @Autowired, @Resource, @Inject 차이점 아주 쉽게 정리

by 알기 쉬운 코딩 사전 2024. 10. 16.
반응형

@Autowired란?

Spring 실행 시점 의존 관계 주입을 위해서 사용하는 어노테이션입니다.
그렇기 때문에 Spring FrameWork에서만 사용 가능합니다.
타입을 기준으로 의존 관계를 주입합니다.

 

 @Resource란?

Java에서 만든 의존 관계 주입을 위해서 사용하는 어노테이션입니다.
이름을 기준으로 의존 관계 주입합니다.

 

@Inject란?

Java에서 만든 의존 관계 주입을 위해서 사용하는 어노테이션입니다.
타입을 기준으로 의존 관계를 주입합니다.

 
 

↔️ @Autowired @Resource @Inject 비교

3가지의 어노테이션 모두 의존 관계 주입을 위한 어노테이션입니다.
 
하지만, @Autowired의 경우에는 Spring 어노테이션이며,
@Resource, @Inject의 경우에는 Java 어노테이션입니다.
 
또한, @Autowired, @Inject의 경우에는 타입을 기준으로 의존 관계를 주입하며,
@Resource의 경우에는 이름을 기준으로 의존 관계를 주입합니다.
 

@Resource // 이름 기준
PostService postService1; // PostService1 타입으로 연결

@Autowired // 타입 기준
PostService postService2; // PostService 타입으로 연결

@Inject // 타입 기준
PostService postService3; // PostService 타입으로 연결

 

개발 순서

  1. @Resource(2006년 12월 11일)
  2. @Autowired(2007년 11월)
  3. @Inject(Spring의 @Autowired를 참고하여 Java에서 개발)

 

👉  @Resource가 레거시 코드에서 많이 보이는 이유

레거시 코드를 보게 되면 @Resource를 많이 보실 수 있습니다.
그러한 이유는 @Resource가 제일 먼저 개발이 된 순수한 Java 어노테이션이며,
과거에는 Spring을 사용하지 않는 개발자들도 있었기 때문에 당시의 트렌드라고 생각합니다.
보통 레거시 코드에서는 @Resource를 사용하는 프로젝트이면 @Inject와 같이 사용하는 경우가 많으며,
@Autowired를 사용하는 프로젝트는 @Autowired만 사용한다는 것이 일반적입니다.

반응형

댓글