기존 제어 방식에서 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>
'Java Web Programming > 6. Spring | MyBatis' 카테고리의 다른 글
[Spring] 스프링 AOP 개념 이해와 적용 방법 (+Proxy 프록시) (0) | 2020.10.28 |
---|---|
[Spring] DBCP를 Spring config로 설정해보기! (+IOC/DI+DL) (0) | 2020.10.27 |
[Spring] 생성자를 통한 DI/DL 적용(constructor-arg) + IOC + maven (0) | 2020.10.27 |
[Spring] DI/DL 적용 + Spring IOC 개발 + maven (0) | 2020.10.27 |
[Spring] 메이븐 maven 형식, Spring IOC 개발단계 (0) | 2020.10.27 |