Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

방카@Dev

[Spring]Ch5.의존 객체 자동주입_올인원 스프링 프레임워크 본문

BackEnd/Spring

[Spring]Ch5.의존 객체 자동주입_올인원 스프링 프레임워크

방카킴 2024. 6. 6. 18:30

https://ridibooks.com/books/4600000293?_s=search&_q=%EC%98%AC%EC%9D%B8%EC%9B%90+%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC&_rdt_sid=search&_rdt_idx=0

 

올인원 스프링 프레임워크

올인원 스프링 프레임워크 작품소개: 기초부터 실무까지 한 권에 담은 올인원 스프링 프레임워크!웹 서비스의 핵심인 스프링 프레임워크의 전체적인 구조와 핵심 이론을 다양한 예제 프로젝트

ridibooks.com

 

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;