방카@Dev
[Spring]Ch5.의존 객체 자동주입_올인원 스프링 프레임워크 본문
1. @Autowired 사용하기
# 기본 설정
1) context 네임 스페이스와 스키마 추가하기
2) <context:annotation-config/> 추가하기 및 기존 constructor-arg 주석 처리
@Autowired 적용 대상 : 객체, 필드, 메서드
1) @Autowired를 이용한 의존 객체 자동 주입
- @Autowired 어노테이션을 사용하면 객체가 생성될 때 데이터 타입을 검색해서 알맞은 객체를 주입
2) 필드에 @Autowired 적용
- 필드와 메서드에 자동주입 시에는 해당 클래스의 기본 생성자가 있어야 함.
- 필드 변수 위에 @Autowired 작성 및 기존 객체를 주입받는 생성자 주석 처리
3) 메서드에 @Autowired 적용
package com.kbfg.digi;
import org.springframework.beans.factory.annotation.Autowired;
public class ContactRegisterService {
...
@Autowired
public void setWordDao(ContactDao contactDao) {
this.contactDao = contactDao;
}
}
2. @Resource 사용하기
@Autowired | @Resource |
Spring 제공 기능 org.springframework.beans.factory.annotation.Autowired; |
Java 제공 기능 javax.annotation.Resource; |
데이터 타입을 이용한 의존객체 자동 주입 | 빈 객체의 이름을 이용한 의존 객체 자동 주입 |
생성자, 필드, 메서드에 사용 가능 | 필드, 메서드에 사용 가능(생성자 사용 불가능) |
#기본 설정
- mvn repository에서 javax annotation-api 검색 후 pom.xml에 추가
#pom.xml
<!-- https://mvnrepository.com/artifact/javax.annotation/javax.annotation-api -->
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
1) @Resource를 이용한 필드 자동 주입
2) @Resource를 이용한 메서드 자동 주입
# 다수의 빈 객체 중 의존 대상 객체 선택 방법
1) 자동 주입 대상 객체가 2개 이상인 경우(qualifier 태그와 @Qualifier 어노테이션 이용)
- @Autowired는 객체 타입을 찾아서 자동으로 의존 객체를 주입하는데 동일한 타입의 의존 객체가 2개 이상인 경우 어떤 의존 객체를 자동 주입해야하는지 판단할 수 없음
- applicationContext.xml에 <qualifier> 태그 추가 후 @Qualifier("이름") 사용
2) 생성자 또는 멤버의 이름이 빈의 id와 같은 경우 (자동 주입)
# 매개변수의 개수가 2개 이상인 경우 ( 매개변수에 @Qualifier 어노테이션 사용)
@Autowired(required=false) 옵션
- applicationContext.cml (IoC 컨테이너)에 주입시킬 주입 대상 객체가 없어도 에러를 발생시키지 않음
3. @Inject를 이용한 의존 객체 주입
- @Autowired와 차이점 : required 속성 제공 X
- pom.xml 에 추가
<!-- https://mvnrepository.com/artifact/javax.inject/javax.inject -->
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
- 자동 주입 대상 객체가 2개 이상인 경우(@Named 애너테이션 이용)
#appCtx.xml
<bean id="contactDao1" class="com.kbfg.digi.ContactDao"/>
<bean id="contactDao2" class="com.kbfg.digi.ContactDao"/>
<bean id="contactDao3" class="com.kbfg.digi.ContactDao"/>
#ContactRegisterService
<!-- 필드 자동 주입 -->
@Inject
@Named("contactDao1")
private ContactDao contactDao;
<!-- 생성자 자동 주입 -->
@Inject
@Named("contactDao1")
public ContactRegisterService(ContactDao contactDao){
this.contactDao = contactDao;
}
<!-- 메서드 자동 주입 -->
@Inject
@Named("contactDao1")
public void setContactDao(ContactDao contactDao){
this.contactDao = contactDao;
'BackEnd > Spring' 카테고리의 다른 글
[Spring]Ch8.Service와 DAO 구현_올인원 스프링 프레임워크 (1) | 2024.06.08 |
---|---|
[Spring]Ch7.스프링 MVC를 이용한 웹 서비스 프로젝트_올인원 스프링 프레임워크 (0) | 2024.06.07 |
[Spring]Ch6.@Configuration을 이용한 빈 생성_올인원 스프링 프레임워크 (0) | 2024.06.07 |
[Spring]Ch4.IoC(Inversion of Control) 컨테이너_올인원 스프링 프레임워크 (1) | 2024.06.06 |
[Spring]STS 및 spring MVC 환경 설정_MacOS (0) | 2024.06.01 |