공통점

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 타입 빈이 주입됨