| 방식 | XML 설정 | Java Config 설정 | 어노테이션 설정 |
|---|---|---|---|
| 생성자 주입 | <constructor-arg ... /> |
new MemberDTO(..., accountGenerator()) |
@Autowired 생성자 |
| Setter 주입 | <property name="..."/> |
member.setPersonalAccount(accountGenerator()) |
@Autowired Setter |
| 필드 주입 | x | x | @Autowired 필드 |
@Data
@NoArgsConstructor
@AllArgsConstructor
public class MemberDTO {
private int sequence;
private String name;
private String phone;
private String email;
private **Account** personalAccount;
}
public interface Account {
/* 설명. 1. 잔액 조회 */
String getBalance();
/* 설명. 2. 입급 */
String deposit(int money);
/* 설명. 3. 출금 */
String withdraw(int money);
}
package com.haenin.common;
public class PersonalAccount implements Account{
private final int BANK_CODE; // 은행 코드
private final String ACC_NO; // 계좌 번호
private int balance; // 잔액
public PersonalAccount(String ACC_NO, int BANK_CODE) {
this.ACC_NO = ACC_NO;
this.BANK_CODE = BANK_CODE;
}
...
Account를 구현한 클래스MemberDTO는 내부적으로 Account 타입을 필요로 함MemberDTO → Account에 의존Account)를 직접 new로 생성하지 않고, 외부(Spring Container)에서 생성해 주입해주는 것⇒ 이걸 통해 객체 간 결합도를 낮추고, 유지보수성을 좋게한다.

spring-context.xml<bean id="**account**" class="com.haenin.common.PersonalAccount">
<constructor-arg index="0" value="110-234-4567890"/>
<constructor-arg index="1" value="20"/>
</bean>
<!-- 1. 생성자 주입-->
<bean id="**member**" class="com.haenin.common.MemberDTO">
<constructor-arg name="sequence" value = "1"/>
<constructor-arg name="name" value = "홍길동"/>
<constructor-arg name="phone" value = "010-123-1234"/>
<constructor-arg name="email" value = "[email protected]"/>
<constructor-arg name="personalAccount" ref="account"/>
</bean>
<!-- Setter 주입 -->
<bean id="**member**" class="com.haenin.common.MemberDTO">
<property name="sequence" value="1"/>
<property name="name" value="홍길동"/>
<property name="phone" value="010-123-1234"/>
<property name="email" value="[email protected]"/>
<property name="personalAccount" ref="account"/>
</bean>
account 빈: PersonalAccount 객체를 생성 (생성자 주입)member 빈: MemberDTO 객체를 생성하면서, personalAccount 속성에 account 빈을 주입(ref)Application.javaApplicationContext context =
new GenericXmlApplicationContext(
"section01/xmlconfig/spring-context.xml");
MemberDTO member = context.getBean(MemberDTO.class);
System.out.println("member = " + member);
context가 spring-context.xml을 읽고, 모든 빈을 생성MemberDTO를 꺼내면, 그 안에 이미 주입된 Account 구현체가 들어있음new PersonalAccount() 하지 않아도 된다.