@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버전까지 유효)
---------------------------------------------------------------------------------------------------------------------------
'SPRING' 카테고리의 다른 글
Java 설정 파일 - 직접 주입 / 자동 주입 어노테이션 (0) | 2020.09.22 |
---|---|
직접 의존 주입 <property> <constructor-args> (0) | 2020.09.18 |
스프링 객체 생성하기 - 싱글톤 패턴 (0) | 2020.09.15 |
maven 프로젝트 / IoC (0) | 2020.09.14 |
트랜잭션 - 예제 [ xml, 어노테이션 ] (0) | 2020.09.14 |