미소의 세상

[Spring] @Resource, @Autowired, @Inject 차이 본문

Spring

[Spring] @Resource, @Autowired, @Inject 차이

짱미소 2022. 3. 25. 17:43

# Spring

# 의존 객체 자동 주입(Automatic Dependency Injection)

스프링 컨테이너가 자동적으로 의존 대상 객체를 찾아 해당 객체에 필요한 의존성을 주입하는 것

# @Resource

  • Java에서 지원하는 어노테이션
  • 특정 프레임워크에 종속적이지 않다.
이름 -> 타입 -> @Qualifier -> 실패

name 속성의 이름을 기준으로 찾는다. 없으면 타입 -> 없으면 @Qualifier 어노테이션의 유무를 찾아 그 어노테이션이 붙은 속성에 의존성을 주입
context:annotation-config/구문을 xml 설정파일에 추가해야 한다. 사용위치 : 멤버변수, setter 메소드

# @Autowired

  • Spring에서 지원하는 어노테이션
  • 주입하려고 하는 객체의 타입이 일치하는지를 찾고 객체를 자동으로 주입
  • 타입이 존재하지 않는다면 @Autowired에 위치한 속성명이 일치하는 bean을 컨테이너에서 찾는다.
  • 그리고 이름이 없는 경우, @Qualifier 어노테이션의 유무를 찾아 그 어노테이션이 붙은 속성에 의존성을 주입한다.
    context:annotation-config/구문을 xml 설정파일에 추가해야 한다. 사용위치 : 멤버변수, setter 메소드, 생성자, 일반 메소드에 적용가능

# @Inject

  • Java에서 지원하는 어노테이션
  • 특정 프레임워크에 종속적이지 않다.
  • @Autowired와 동일하게 작동하지만 찾는 순서가 다르다.
  • @Inject를 사용하기 위해서는 maven이나 gradle에 javax 라이브러리 의존성을 추가해야한다.
타입 -> @Qualifier -> 이름 -> 실패

사용위치 : 멤버변수, setter 메소드, 생성자, 일반 메소드에 적용가능

# @Qualifier

  • 타입이 동일한 bean 객체가 여러개 있으면, Spring이 Exception을 일으킨다.(ex : @Autowired를 동일한 타입에 사용한 곳이 있다면)
  • 스프링이 어떤 bean을 주입해야 될지 모르기 때문에 컨테이너 초기화 하는 과정에서 Exception
  • @Autowired의 주입 대상이 한 개여야 하는데 실제로는 두 개 이상의 빈이 존재해 주입할 때 사용할 객체를 선택할 수 없기 때문
  • 단, @Autowired가 적용된 필드나 설정 메서드의 property 이름과 같은 이름을 가진 빈 객체가 존재할 경우엔 이름이 같은 빈 객체를 주입 받는다.

'Spring' 카테고리의 다른 글

[Spring] AOP 란?  (0) 2022.10.19
@RequestParam, @PathVariable, @RequestBody  (0) 2022.10.11
Spring boot @Valid 어노테이션 종류  (0) 2022.04.15
Spring- 필터, 인터셉터 AOP 차이  (0) 2022.03.11
Spring vs Spring boot 비교  (1) 2022.02.27
Comments