[Spring] @Autowired와 @Inject 차이점 및 올바른 사용법
1. @Autowired와 @Inject란?
Spring 프레임워크에서는 **의존성 주입(Dependency Injection, DI)** 을 통해 객체 간의 결합도를 낮추고, 유연한 코드 구조를 제공합니다.
Spring에서는 의존성 주입을 수행하기 위해 두 가지 주요 어노테이션을 제공합니다:
- @Autowired (Spring 전용): Spring 프레임워크에서 제공하는 의존성 주입 어노테이션
- @Inject (자바 표준 - JSR 330): Java 표준 의존성 주입 어노테이션 (javax.inject 패키지에서 제공)
2. @Autowired와 @Inject의 차이점
구분 | @Autowired | @Inject |
---|---|---|
제공 | Spring 전용 (org.springframework.beans.factory.annotation) | Java 표준 (javax.inject.Inject, JSR-330) |
사용 가능 환경 | Spring 전용 프로젝트 | Spring 포함 Java EE 환경 |
기본 동작 | 타입(Type) 기반 자동 주입 | Spring 컨테이너에서 자동 주입 |
필수 여부 | 기본적으로 필수 (required=true) | 기본적으로 필수 아님 |
Spring 기능 지원 | required=false 설정 가능 |
Spring 기능과 완벽히 연동되지 않음 |
3. @Autowired 사용 예제
기본 사용법 - 생성자 주입 방식
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
private final UserRepository userRepository;
@Autowired // 생성자 주입
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
public void getUserInfo() {
System.out.println("User info: " + userRepository.findUser());
}
}
필수 주입이 아닌 경우 (required=false)
@Autowired(required = false)
private SomeService someService;
4. @Inject 사용 예제
@Inject는 자바 표준이지만, Spring에서도 사용할 수 있습니다.
import javax.inject.Inject;
import org.springframework.stereotype.Service;
@Service
public class UserService {
private final UserRepository userRepository;
@Inject
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
}
📌 @Inject는 Spring에서 제공하는 기능을 완벽하게 활용할 수 없기 때문에 Spring 환경에서는 @Autowired를 더 권장합니다.
5. @Autowired와 @Inject 중 어떤 것을 사용해야 할까?
- Spring 환경이라면 @Autowired 를 사용 → Spring의 추가 기능 지원 가능
- Spring 외 Java EE 환경까지 고려해야 한다면 @Inject 를 사용할 수도 있음
- Spring Boot와 함께 사용할 경우 @Autowired가 더 적합
📌 결론
Spring 기반 프로젝트에서는 @Autowired를 사용하는 것이 더 권장됩니다. @Inject도 사용 가능하지만, Spring의 추가 기능을 활용하지 못할 수 있습니다.
🔎 더 많은 Spring 관련 오류 해결 방법이 궁금하다면?
'Java 오류 & 개발 > Spring 오류 해결' 카테고리의 다른 글
[Spring 오류 해결] Spring @Transactional 주의점 및 롤백 문제 해결 (0) | 2025.03.14 |
---|---|
[Spring] @Transactional 동작 원리와 트랜잭션 롤백 처리 방법 (0) | 2025.03.13 |
[Spring Boot] BeanCreationException 오류 해결 방법 (0) | 2025.03.11 |
[Spring Boot] NoSuchBeanDefinitionException 오류 해결 방법 (0) | 2025.03.10 |