이번에 소개하는 세가지 어노테이션 @Autowired, @Resource,@Inject은 모두 의존관계를 자동으로 연결해주는 기능을 가진 어노테이션입니다. 다만 조금씩의 차이가 있습니다. 

 

 

 @Autowired

 @Inject

@Resource 

 범용

스프링 전용

자바에서 지원 

자바에서 지원

 연결방식

타입에 맞춰서 연결 

타입에 맞춰서 연결 

이름으로 연결

 

 자세한 설명을 하자면, @Inject와 @Resource는 JSR에 실려있는 자바 기존의 어노테이션입니다. 반면 @Autowired의 경우에는 스프링에서 등장한 어노테이션입니다. 따라서 스프링 이외에서는 사용 할 수 없습니다. 만약에 프로젝트를 스프링에서 다른 프레임워크로 바꿀 생각이 있으시다면 @Autowired보단 @Inject나 @Resource를 쓰시면 됩니다. 다만 이런 경우는 거의 없다고 봅니다.

 

또한 연결 방식은 @Autowired와 @Inject는 타입에 맞춰서 하는 반면, @Resource는 이름에 맞춰서 연결하게 됩니다. 예를 들어보겠습니다.

 

Bird 인터페이스를 상속하는 Chicken과 Penguin 이라는 클래스가 있다고 합시다. 

Chicken과 Penguin 클래스를 연결할 것이므로 @Component로 빈에 등록해주었습니다.

public class Bird{}

@Component

public class Chicken implements Bird{}

@Component

public class Penguin implements Bird{}

 

  

그리고 다음과 같이 연결해봅시다.

@Autowired

private Chicken penguin;  //Chicken 타입으로 연결됩니다.

 

@Inject

private Penguin chicken; //Penguin 타입으로 연결됩니다.

@Resource

private Chicken penguin;  //penguin 타입으로 연결됩니다만, Chicken 클래스를 자료형으로 두었기에 캐스팅이 되지 않아 에러가 납니다

 

@Resource

private Bird penguin;      //penguin 타입으로 연결되어 호출해보면 penguin 클래스의 값을 호출하는 것을 볼 수 있습니다.


@Autowired와 @Inject의 경우에도 @Qualifier 어노테이션을 사용하면, 타입 이외의 방법으로도 연결 할 수 있습니다.

(찾은 같은 타입의 빈객체 중에서 이름이(@Qualifier = Name) 같은 것으로 연결)

@Autowired

@Qualifier("chicken")

pirvate Brid penguin;

Bird타입의 빈객체중 chicken이라는 이름을 가진 빈 객체와 연결해서 맵핑




'Programming > Spring' 카테고리의 다른 글

ModelAndView 와 ViewResolver  (0) 2018.02.14
파일 업로드/ 다운로드  (0) 2018.02.09
MariaDB Auto_Increment  (0) 2018.02.08
DAO, DTO, VO  (0) 2018.02.08
Filter, Interceptor, AOP  (0) 2018.02.05

+ Recent posts