🤔 Question
👉 Spring에서 @Resource란 무엇일까요? 아주 쉽게 말하면, 이름표를 보고 정확한 부품을 가져오는 주입 방식입니다.
👉 @Autowired가 “모양이 같은 부품”을 기준으로 찾는다면, @Resource는 “이름이 적힌 부품”을 먼저 찾습니다.
🧩 왜 @Resource가 필요할까?
👉 Spring에는 같은 타입의 Bean이 여러 개 존재하는 경우가 자주 있습니다.
👉 이때 @Autowired만 사용하면 Spring이 “어떤 걸 넣어야 하지?” 하고 헷갈릴 수 있습니다.
👉 @Resource는 Bean 이름을 기준으로 정확히 지정할 수 있기 때문에 이런 혼란을 줄여줍니다.
🔍 @Resource의 동작 방식
👉 @Resource는 다음 순서로 동작합니다.
1. name 속성이 있으면 → 이름으로 Bean 검색
2. name이 없으면 → 변수명으로 Bean 검색
3. 그래도 없으면 → 타입으로 검색
👉 즉, 이름 우선 → 타입 보조 전략을 사용합니다.
📌 @Autowired와 @Resource 차이
👉 @Autowired는 타입 기준
👉 @Resource는 이름 기준
👉 또한 @Autowired는 Spring 전용 어노테이션이고, @Resource는 Java 표준(javax/jakarta) 어노테이션입니다.
👉 그래서 Spring이 아닌 환경에서도 @Resource는 사용할 수 있습니다.
⚠️ 실무에서 주의할 점
👉 Bean 이름을 잘못 지정하면 런타임 에러가 발생합니다.
👉 또한 최근 Spring Boot 프로젝트에서는 @Autowired + 생성자 주입을 더 많이 사용합니다.
👉 하지만 레거시 시스템이나 XML 기반 설정에서는 @Resource가 여전히 자주 사용됩니다.
☔ 정리
👉 @Resource는 이름을 기준으로 Bean을 주입하는 어노테이션입니다. 같은 타입의 Bean이 많을 때 정확한 대상을 지정하고 싶다면 아주 유용한 선택이 됩니다.
👉 Spring을 깊이 이해할수록 “언제 @Autowired를 쓰고, 언제 @Resource를 쓸지”에 대한 기준이 생기게 됩니다.
If I was of any help to you, please buy me coffee 😿😢😥
If you have any questions, please leave them in the comments
🧭 References
<