다양한 의존객체 주입 (constructor-arg, property)

2020. 11. 19. 16:00Backend/☕️ Java

다양한 의존 객체 주입 방법

 

bean 객체 내에 의존객체를 주입하는 대표적인 방법은

  1. 생성자(constructor) 주입
  2. 기본자료형(property) 주입
  3. 리스트  주입
  4. 해쉬맵 주입

4가지가 있습니다.

 

그중에서 constructor-args와 property의 차이점을 알아보겠습니다.

 

1. Constructor-args: 생성자

- 우선 의존 주입이란 뜻은, 1) 의존성 있는 객체를 2) 외부에서 주입 한다는 뜻입니다.

- 여기서 의존성 있는 객체는 StudentDao, 외부에서 주입은 constructor-arg를 통해 이뤄집니다.

- 아래 코드는, StudentRegisterService  bean객체에 studentDao라는 객체를 주입한 것입니다.

- 즉, StudentRegisterService 클래스는 StudentDao 클래스에 의존성을 갖게됩니다.

<bean id="studentDao" class="ems.member.dao.StudentDao" ></bean>
	
<bean id="registerService" class="ems.member.service.StudentRegisterService">
	<constructor-arg ref="studentDao" ></constructor-arg>
</bean>

 

2. property: 메소드

- 아래의 bean객체는 DataBaseConnectionInfo 라는 클래스로부터 생성됐습니다.

- 해당 클래스(DataBaseConnectionInfo )를 살펴보면, property name에 (jbdcUrl, userId, userPw) 를 인자로 받는것을 볼 수 있는데, 이는 DataBaseConnectionInfo 클래스에서 선언된 변수입니다.

<bean id="dataBaseConnectionInfoDev" class="ems.member.DataBaseConnectionInfo">
	<property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:xe" />
	<property name="userId" value="scott" />
	<property name="userPw" value="tiger" />
</bean>

- property name

- private 접근 제어자로 선언돼있기에, 외부 클래스에서 사용하기 위해선 setter/getter 메소드가 필요합니다.

- 때문에, property 의존 객체 주입을, 'setter를 이용한 의존 객체 주입'이라고도 부릅니다.

- setter 메소드 이름의 set을 제외하고 소문자로 name에 할당합니다. (ex setUserId => userid)

 

- property value

- setter 메소드가 필요하다는 건, 변수에 값(value)을 할당한다는 뜻입니다.

- 각 변수 (jbdcUrl, userId, userPw) 맞는 값을 value 속성을 통해 할당합니다.

public class DataBaseConnectionInfo {
	
	private String jdbcUrl;
	private String userId;
	private String userPw;
    
    // setter 메소드
	public void setJdbcUrl(String jdbcUrl) {
		this.jdbcUrl = jdbcUrl;
	}
	public void setUserId(String userId) {
		this.userId = userId;
	}
	public void setUserPw(String userPw) {
		this.userPw = userPw;
	}
    
}

 

결론: constructor-args와 property의 차이점

constructor-args: 의존하는 객체를 생성자를 통해 전달(주입)받는다.

property: setter라는 메소드를 이용하여 의존하는 객체를 주입한다.

결국 주입하는 대상이 생성자냐, 메소드냐의 차이입니다.

 

'Backend > ☕️ Java' 카테고리의 다른 글

자바 람다식, lambda expression  (0) 2020.11.25
자바 제너릭 Generic  (0) 2020.11.25
Spring container Lifecycle  (0) 2020.11.18
Spring 기본 환경 세팅/ Maven이란?  (0) 2020.11.16
예시를 통한 추상 클래스 이해  (0) 2020.11.16