공통점
3개의 어노테이네션이 모두 의존성 주입(DI)을 위한 어노테이션이다.
Autowired
특징
- 타입을 기준으로 빈을 주입해준다.
- 동일 타입의 빈이 하나일 경우 문제가 없다.
- 동일 타입의 빈이 여러 개 있을 경우 에러가 발생한다.
- @Qualifier를 사용하여 명시적으로 지정하거나, 빈 이름과 변수 이름이 일치할 경우 그 빈을 주입.
- 스프링 전용 어노테이션.
- 필드, 세터, 생성자에 사용이 가능하다.
예제
@Autowired
private Animal dog; // Animal 타입 빈이 주입됨Resource
특징
- 이름을 기준으로 빈을 주입해준다.
- 빈 이름이 변수와 일치하면 빈을 주입해준다.
- 이름으로 매칭되지 않으면 타입으로 검색한다.
- 이름 → 타입
- 필요한 경우 명시적으로 @Resource(name = “specificName”)을 지정해야 한다.
- 자바 표준의 어노테이션으로 스프링 이외에도 사용할 수 있다.
- 필드, 세터에 사용이 가능하다.
예제
@Resource
private Animal dog; // 이름이 dog인 빈이 주입된다.Inject
특징
- 타입을 기준으로 빈을 주입해준다.
- 동일 타입의 빈이 1개일 경우 문제 없이 동작한다.
- 동일 타입의 빈이 여러 개라면 @Qualifier로 명시적으로 지정해야 한다.
- 자바 표준의 어노테이션으로 스프링 이외에도 사용할 수 있다.
- 생성자 주입, 필드 주입, 세터 주입에 사용 가능하다.
예제
@Inject
private Animal dog; // Animal 타입 빈이 주입됨