2020. 11. 19. 16:00ㆍBackend/☕️ Java
다양한 의존 객체 주입 방법
bean 객체 내에 의존객체를 주입하는 대표적인 방법은
- 생성자(constructor) 주입
- 기본자료형(property) 주입
- 리스트 주입
- 해쉬맵 주입
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 |