비즈니스 계층은 똑같은 일을 두번하여 비효율적으로 보일지 몰라도 서비스를 확장할 때 꼭 필요하다.
📝비즈니스 계층 (서비스 계층)
- 고객의 요구사항을 반영하는 계층
- 업무의 단위로 설계
- 트랜잭션(거래)의 단위
- 여러개의 Mapper나 DAO를 사용하는 경우가 존재함
- xxxService의 형태로 작성
📌서비스 패키지 설정
- 인터페이스와 클래스를 설정하고, root-context.xml에 등록
우선 패키지와 인터페이스와 클래스를 만들어준다.
인터페이스를 목적은 하나다. 실제 객체를 모르게하는 것이다.
실제 객체를 몰라도 타입만 알고 만들수 있게 유연하게 만드는 것이 목적이다.
의존성 주입과 인터페이스를 결합하면서 굉장히 유연한 코드가 되는 것이다.
root-context.xml에 가셔서 context를 추가해주시고
밑의 코드를 넣는다.
<context:component-scan base-package="org.zero.service"></context:component-scan>
그리고 refresh를 해주고 조금 기다려주면
s자가 생긴다. s자가 생긴다는 것은 bean으로 관리가 된다는 뜻이다.
BoardServiceImpl.java 코드
package org.zero.service;
import org.springframework.stereotype.Service;
import org.zero.mapper.BoardMapper;
import lombok.RequiredArgsConstructor;
import lombok.ToString;
import lombok.extern.log4j.Log4j;
@Service
@Log4j
@RequiredArgsConstructor //주입시키는
@ToString
public class BoardServiceImpl implements BoardService{
private final BoardMapper mapper;
}
@RequiredArgsConstructor 로 의존성 주입을 시켜주었으니 Test를 해보겠다.
테스트를 위한 패키지와 클래스를 만들어주고
package org.zero.service;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import lombok.extern.log4j.Log4j;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
@Log4j
public class BoardServiceTests {
@Autowired
private BoardService service;
@Test
public void testPrint() {
log.info(service);
}
}
위와 같이 코드를 작성해주고 Test를 해보면
주입이 성공적으로 된 것을 확인 가능하다.
이제 서비스계층 구현의 준비가 다 된 것이다.
📌구현
각각 리턴타입이 필요한지 판단하여 등록 조회 수정 삭제 getList까지 만들어주고
BoardServiceImpl.java에 코드를 위 사진과 같이 집어 넣는다.
그리고 test코드를 만들어서 실행해보자.
이렇게 board의 내용이 잘나온다.
다른 것들도 똑같은 로직으로 test가능하니 생략하겠다 ㅎㅎ
다음글부터 controller랑 jsp만들면서 진행하겠다.
'Spring' 카테고리의 다른 글
[Part 2] 템플릿 적용하기 #6 (0) | 2023.01.21 |
---|---|
[Part 2] Controller 게시물 목록/등록/수정/삭제 #5 (0) | 2023.01.20 |
[Part 2] 게시물 조회/삭제/수정 #3 (0) | 2023.01.18 |
[Part 2] BoardVO클래스와 매퍼테스트 #2 (0) | 2023.01.17 |
[Part 2] 스프링 프로젝트 구성 #1 (0) | 2023.01.15 |