Spring

[Spring] @Autowired @Resource @Inject @Qualifier

📝 작성 : 2020.07.05  ⏱ 수정 : 
728x90

@Autowired, @Resource, @Inject의 역할

세 어노테이션의 공통점은 자동 의존 주입(DI)입니다.

@Autowired, @Resource, @Inject의 차이점

  @Autowired @Resource @Inject
지원 Spring Framework에서 지원 Java에서 지원 Java에서 지원
연결
순서
1. 타입으로 연결 1. 이름으로 연결 1. 타입으로 연결
2. 이름으로 연결 2. 타입으로 연결 2. 이름으로 연결
위치 필드,생성자,setter메서드O 생성자X, 필드,setter메서드O 필드,생성자,setter메서드,일반메서드O

@Autowired

타입으로 자동 의존 주입을 합니다. Spring Framework에 종속적입니다.

@Qualifier어노테이션을 사용하여 강제연결을 할 수 있습니다.

required속성을 false로 지정하면 주입할 의존 객체가 존재하지 않아도 예외를 발생시키지 않습니다.

@Autowired 적용순서

  1. 타입이 같은 Bean 객체를 검색합니다. 존재하면 해당 객체를 사용합니다. @Qualifier가 명시되어 있는 경우 @Qualifier와 같은 값을 가져야 합니다.
  2. 같은 타입의 Bean 객체가 두개 이상인 경우
    1. @Qualifier로 지정한 Bean 객체를 찾고 존재하면 그 객체를 사용합니다.
    2. @Qualifier가 없는 경우 이름이 같은 Bean 객체를 찾고 존재하면 그 객체를 사용합니다.

간단하게 표현하면 타입 > 이름 > Qualifier > fail 입니다.

@Resource

name 속성으로 자동 의존 주입을 합니다. Java에서 지원하므로 특정 프레임워크에 종속적이지 않습니다.

@Resource 사용시 name 속성을 생략하면 @Resource가 적용된 필드나 메서드의 타입을 사용합니다.

@Autowired와 마찬가지로 @Qualifier 어노테이션을 사용할 수 있습니다.

@Resource 적용순서

  1. name 속성에 지정한 Bean 객체를 검색합니다. 존재하면 해당 객체를 사용합니다.
  2. name 속성이 없을 경우 동일한 타입을 갖는 Bean 객체를 찾습니다. 존재하면 해당 객체를 사용합니다.
  3. name 속성이 없고 동일 타입의 Bean 객체가 두개 이상인 경우
    1. 같은 이름을 가진 Bean 객체를 찾고 존재하면 그 객체를 사용합니다.
    2. 같은 이름의 Bean 객체가 없다면 @Qualifier를 이용해서 주입할 빈 객체를 찾습니다.

간단하게 표현하면 이름 > 타입 > Qualifier > fail 입니다.

@Inject

타입으로 자동 의존 주입을 합니다. Java에서 지원하므로 특정 프레임워크에 종속적이지 않습니다.

@Autowired와 동일하게 작동합니다. 하지만 적용 순서는 약간 다릅니다.

타입 > Qualifier > 이름 > fail 입니다.

반응형