본문 바로가기

SPRING

의존 자동 주입 @Autowired @Qualified @Resource

@Autowired 란?


의존 자동 주입 어노테이션
절대로 객체를 생성해주는게 아니라~ 필요로 하는 의존만 자동으로 주입해주는 것

객체 생성은 어디서 한다? xml 파일에서 <bean> 태그를 통해 이미 객체 생성은 해놓았다.

xml에서 <property>~ <const~> 이렇게 주입하기 귀찮으니까 어노테이션으로 해결하는거야.

 

의존 주입을 할 수 있는 위치는 총 세 군데가 있다.

1. 변수 2. setter 3. 생성자

 

아래 예시를 통해 확인해보자.

 

 

 

@Qualifier란?

 

만약, xml에서 객체를 두 개 이상 만들어버린다면, 어떤 객체에 주입을 할 것인지 정해줘야한다.

왜냐하면, @Autowired는 객체 주입을 하나만 해줄 수 있기 때문에.

아래 예시를 확인해보자.

 

 

 

@Resource란?

 

- @Resource(name = “bean id”)

- 빈을 자동 주입하는 어노테이션

- 필드, 메서드에서만 적용이 가능하며, 생성자에서는 사용 불가능

- name 속성을 통해 특정 bean의 id를 지목할 수 있음

- @Autowired, @Qualifier를 합쳐놓은 것

- 잘 쓰지 않음 (8버전까지 유효)

 

 

*어노테이션을 활용한 객체 주입 방법

1.setter를 활용한 주입

- xml에서 <property>로 객체 주입 안해도 @가 알아서 자동으로 해줌

@Autowired

public void setPaper(Paper paper) { // xml에 Paper 타입이 있는지를 확인하고 있다면 주입

this.paper = paper;

 

2.생성자를 활용한 주입

@Autowired

public Printer(Paper paper) { // xml에 Paper 타입이 있는지를 확인하고 있다면 주입

this.paper = paper;

}

→ 둘다 이렇게 함으로써 xml에서는 코드가 하단처럼 간단해짐 (<property> 빠진 것을 확인할 수 있음)

<context:annotation-config />

<bean id="paper" class="com.spring.basic2.ex04.Paper"></bean>

<bean id="printer" class="com.spring.basic2.ex04.Printer"></bean>

→ 빨간 글씨가 타입을 나타냄, xml 파일에 해당 타입이 있다면 객체 주입을 알아서 진행 

 

3.변수를 활용한 주입 - 가장 많이 씀

@Autowired

- 객체를 자동 주입할 때 사용하는 어노테이션

- 내가 따로 xml에서 <config~  / property> 안해줘도 됨, 딱 객체 생성 및 초기화만 해주면 된다

- 스캔 명령(<context:annotation-config />)을 통해 스스로 객체를 찾아 주입하는데, 

  ★타입 이름으로 검색합니다. (클래스명이라도 보면 쉬울듯)

- 타입을 찾아내지 못하면 이름(id 속성값)을 통해 검색합니다.

- 생성자, 필드, 메서드에 적용 가능합니다. (주로 필드 사용)

- 필드에 자동 주입 설정을 할 때는 기본 생성자가 반드시 있어야 합니다.

- @Inject와 동일한 기능(이건 자바 어노테이션)

 

@Qualifier("bean id")

- @Autowired를 사용할 때 동일 타입의 빈이 여러 개 있을 경우

- 어떤 빈을 주입해야 하는지 선택해주는 추가 어노테이션

- 기본 생성자를 반드시 반드시 꼭 꼭 넣어주자!

 

 

@Resource(name = “bean id”)

- 빈을 자동주입하는 아노테이션

- 필드, 메서드에서만 적용이 가능하며, 생성자에서는 사용 불가능

- name 속성을 통해 특정 bean의 id를 지목할 수 있음

- @Autowired, @Qualifier를 합쳐놓은 것

- 잘 쓰지 않음 (8버전까지 유효)

 

---------------------------------------------------------------------------------------------------------------------------