본문 바로가기
Java Web Programming/6. Spring | MyBatis

[Spring] 비즈니스 로직 계층 추가 (IOC, DI+DL)

by 파프리카_ 2020. 10. 27.
728x90
반응형

기존 제어 방식에서 IOC 적용 어플리케이션으로 변경

 

<< 구현 순서 >>

1. 추상화 (인터페이스 적용)
2. maven을 통한 Spring 실행 환경 구축 (spring library를 실행환경에 추가)

3. Spring config (ioc.xml) 정의

4. ApplicationContext(Spring container)를 실행하여 필요한 의존 객체 확보 (DL or DI)

5. 비즈니스 실행 (입금 처리)

 

 

스프링 비즈니스(서비스) 계층가 있는 이유

비즈니스(서비스) 계층은 한 가지 서비스(ex. 계좌 계설)가 있고,영속성 계층 DAO에 여러 DAO(계좌DAO, 포인트DAO, 이력DAO)와 메서드가 각각 있을 경우,프레젠테이션 계층(ex.TestIOC)가 한 가지 서비스를 요청해도, 영속성 계층에 있는 여러 기능이 한 번에 이루어지게 하기 위함이다.

 

★Transaction 처리 - 업무 정의를 위해!


/model

영속성 계층

/BankDAO.java <<interface>>

package model;

public interface BankDAO {
	public void deposit(int money);
}

 

/KBBankDAOImpl.java

package model;

public class KbBankDAOImpl implements BankDAO {
	
	@Override
	public void deposit(int money) {
		System.out.println("국민은행에 " + money + "원 입금 완료!");
	}
}

 

/KakaoBankDAOImpl.java

package model;

public class KakapBankDAOImpl implements BankDAO {

	@Override
	public void deposit(int money) {
		System.out.println("카카오뱅크에 " + money + "원 입금 완료!");
	}
}

비즈니스 계층

/BankService.java <<interface>>

package model;

public interface BankService {
	public void deposit(int money);
}

 

/BankServiceImlp.java

package model;

public class BankServiceImpl implements BankService{
	
	// private KbBankDAOImpl dao; //결합도가 높은 코드
	private BankDAO bankDAO; //결합도가 낮은 코드
	
	// DI방식으로 의존대상객체를 받아오기 위해 생성자 만듦
	public BankServiceImpl(BankDAO bankDAO) {
		this.bankDAO = bankDAO;
	}
	
	@Override
	public void deposit(int money) {
		System.out.println("계좌에 대한 트랜잭션 관리");
		bankDAO.deposit(money);
		System.out.println("입금처리에 대한 이력 저장");
	}
}

/test

/TestIOC.java

package test;
/**
 * IOC 적용 어플리케이션으로 처리
 * 1. 추상화 (인터페이스 적용)
 * 2. maven을 통한 Spring 실행 환경 구축 (spring library를 실행환경에 추가)
 * 3. Spring config (ioc.xml) 정의
 * 4. ApplicationContext(Spring container)를 실행하여 필요한 의존 객체 확보 (DL or DI)
 * 5. 비즈니스 실행 (입금 처리)
 */

import org.springframework.context.support.ClassPathXmlApplicationContext;

import model.BankService;

public class TestIOC {
	public static void main(String[] args) {
		
		ClassPathXmlApplicationContext factory
		 = new ClassPathXmlApplicationContext("ioc.xml");
	
		//DL 방식으로 BankDAO가져오기
		//BankDAO bank = (BankDAO) factory.getBean("bankDAO");
		//bank.deposit(100);
		
		BankService service = (BankService) factory.getBean("bankService");
		service.deposit(100);
		
		factory.close();
	}
}

/ioc.xml

 

1)bean id=bankDAO에 KbBankDAOImpl를 할당할 경우,

TestIOC.java의 결과값은 아래와 같다.

계좌에 대한 트랜잭션 관리
국민은행에 100원 입금 완료!
입금처리에 대한 이력 저장 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
	
	<bean id="bankDAO" class="model.KbBankDAOImpl"></bean>
	
	<!-- 생성자를 통해 할당 (DI방식) -->
	<bean id="bankService" class="model.BankServiceImpl">
		<constructor-arg>
			<ref bean="bankDAO"></ref>
		</constructor-arg>
	</bean>
	
</beans>

 

2)bean id=bankDAO에 KakapBankDAOImpl를 할당할 경우,

TestIOC.java의 결과값은 아래와 같다.

계좌에 대한 트랜잭션 관리 
카카오뱅크에 100원 입금 완료! 
입금처리에 대한 이력 저장 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
	
	<bean id="bankDAO" class="model.KakapBankDAOImpl"></bean>
	
	<!-- 생성자를 통해 할당 (DI방식) -->
	<bean id="bankService" class="model.BankServiceImpl">
		<constructor-arg>
			<ref bean="bankDAO"></ref>
		</constructor-arg>
	</bean>
	
</beans>
728x90
반응형