개발하는 뚝딱이

스프링 6.DI(Dependency injection) 본문

스프링 6.DI(Dependency injection)

개발자뚝딱이 2019. 8. 28. 23:05

DI(Dependency Injection)란?

ex) 장난감

배터리 일체형 → 배터리가 떨어지면 장난감을 새로 구입해야 한다

배터리 분리형  배터리가 떨어지면 배터리만 교체하면 된다

 

객체를 통해 많은 기능을 구현할 수 있으며, 객체 하나하나마다 프로그램에 엮여 있다.

 

배터리 분리형  배터리라는 객체에 의존함 [의존주입] (배터리를 주입함)

▶ 좀 더 유연성있고 단단한 프로그래밍

 

/* 배터리 일체형 */
public class ElectronicCarToy {
	private Battery battery;
  
	public ElectronicCarToy() {
		battery = new NormalBattery();
	}
  
}
/* 배터리 분리형 */
public class ElectronicRobotToy {
	private Battery battery;
  
	public ElectronicRobotToy() {
  
	}
 

	public void setBattery(Battery battery) {
    		this.battery = battery;
	}
}
/* 배터리 분리형 */
public class ElectronicRadioToy {
	
	private Battery battery;
	
	public ElectronicRadioToy(Battery battery) {
		this.battery = battery;
	}
	
	public void setBattery(Battery battery) {
		this.battery = battery;
	}
	
}

 

 

스프링 DI 설정 방법

 

스프링 컨테이너 생성 및 빈(Bean) 객체 호출 과정

  • 스프링 설정파일 (applicationContext.xml) → GenericXmlApplicationContext → Spring Container [ 객체, 객체, 객체, ... ]              → getBean() 메소드를 통해 가져다 쓸 수 있음 → 빈(Bean) 객체를 필요로 하는 로직

클래스 구조

  • Main class → 조립기[Java언어 이용], 조립기[xml언어 이용 - applicationContext]  → service 클래스  → DAO클래스 
<bean id="studentDao" class="ems.member.dao.StudentDao" ></bean>

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

<bean id="modifyService" class="ems.member.service.StudentModifyService">
  <constructor-arg ref="studentDao" ></constructor-arg>
</bean>

<bean id="deleteService" class="ems.member.service.StudentDeleteService">
  <constructor-arg ref="studentDao" ></constructor-arg>
</bean>

<bean id="selectService" class="ems.member.service.StudentSelectService">
  <constructor-arg ref="studentDao" ></constructor-arg>
</bean>

<bean id="allSelectService" class="ems.member.service.StudentAllSelectService">
  <constructor-arg ref="studentDao" ></constructor-arg>
</bean>

 

public StudentRegisterService(StudentDao studentDao) {
  this.studentDao = studentDao;
}
public StudentModifyService(StudentDao studentDao) {
  this.studentDao = studentDao;
}
public StudentDeleteService(StudentDao studentDao) {
  this.studentDao = studentDao;
}
public StudentSelectService(StudentDao studentDao) {
  this.studentDao = studentDao;
}
public StudentAllSelectService(StudentDao studentDao) {
  this.studentDao = studentDao;
}