객체 간의 의존 관계를 빈 설정 정보를 바탕으로 컨테이너가 자동적으로 연결해주는 것을 말한다. 이를 통해 객체 간의 결합도를 낮출 수 있으며 이로 인해 유지보수성과 유연성이 증가한다.
그냥 java에서는 객체를 생성할 때 굳이 필드나 생성자가 없어도 객체를 생성할 수 있다! 그러나 Spring이 Bean을 생성할 때,
"객체 생성" + "의존성 주입(DI)" 을 함께 처리해야 합니다.
그래서, Spring에서 생성자 vs 필드 vs Setter 중 선택하여 주입하면 된다.
<!-- 1. 생성자 주입-->
<!-- <bean id="member" class="com.ohgiraffers.common.MemberDTO">-->
<!-- <constructor-arg name="sequence" value="1"/>-->
<!-- <constructor-arg name="name" value="홍길동"/>-->
<!-- <constructor-arg name="email" value="hong@gmail.com"/>-->
<!-- <constructor-arg name="phone" value="010-1234-5678"/>-->
<!-- <constructor-arg name="personalAccount" ref="account"/>-->
<!-- </bean>-->
@Configuration
public class ContextConfiguration {
@Bean
public Account accountGenerator() {
return new PersonalAccount(20, "110-234-4567890");
}
@Bean
public MemberDTO memberGenerator() {
/* 설명. setter 주입 */
// MemberDTO member = new MemberDTO();
// member.setSequence(1);
// member.setName("홍길동");
// member.setPhone("010-234-5678");
// member.setEmail("hong@gmail.com");
// member.setPersonalAccount(accountGenerator());
//
// return member;
/* 설명. 생성자 주입 */
return new MemberDTO(1, "홍길동", "010-234-5678",
"hong@gmail.com", accountGenerator());
}
}
참고) this는 나중에 이 해당 메소드를 부르는 PersonalAccount타입의 객체를 의미한다.
public class PersonalAccount implements Account{
private final int bankCode;
private final String accNo;
private int balance;
public String getBalance(){
return this.accNo + "계좌의 현재 잔액은" + this.balance + "원입니다."
}
}