티스토리 뷰

지금까지 Spring MVC 예제 구조를 구성하면서 Controller는 항상 DAO를 직접 사용했는데, 이는 DAO를 수정할 필요가 있을 때, 컨트롤러를 직접 다시 건드려야 하기 때문에, Spring MVC 구조에서 요구하는 바는 절대 아니다. 

따라서 Spring 초반부에 실습했던 것 처럼 인터페이스를 활용하여 Controller에 의존성을 주입하는 방식으로 구성해야 한다.


이렇게 구성하는 또 다른 이유는 Service를 구현받은 Service 클래스가 없을 경우, 우리는 어드바이저를 구성할 수 없고, 이를 이용한 AOP 구성 또한 불가능해지기 때문이다.

 

이전에 한번 포스팅했던 내용이기 때문에 따로 자세한 설명은 생략하겠다.


◎BoardService(interface)

package com.freeflux.biz.board.impl;

import java.util.ArrayList;
import java.util.List;

import com.freeflux.biz.board.BoardVO;

public interface BoardServiceInt {

	public void insertBoard(BoardVO vo);
	// 글 수정
	public void updateBoard(BoardVO vo);
	// 글 삭제
	public void deleteBoard(BoardVO vo);

	// 글 상세조회
	public BoardVO getBoard(BoardVO vo);

	// 글 목록 조회
	public List<BoardVO> getBoardList(BoardVO vo);
	
}

 

◎BoardServiceInpl.java

package com.freeflux.biz.board.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import com.freeflux.biz.board.BoardVO;

public class BoardService implements BoardServiceInt{

	@Autowired
	private BoardDAO boardDao;
	
	public BoardService() {
		
	}

	@Override
	public void insertBoard(BoardVO vo) {
		boardDao.insertBoard(vo);
	}

	@Override
	public void updateBoard(BoardVO vo) {
		boardDao.updateBoard(vo);
	}

	@Override
	public void deleteBoard(BoardVO vo) {
		boardDao.deleteBoard(vo);
	}

	@Override
	public BoardVO getBoard(BoardVO vo) {
		
		return boardDao.getBoard(vo);
	}

	@Override
	public List<BoardVO> getBoardList(BoardVO vo) {
		return boardDao.getBoardList(vo);
	}
	
	

}

 

◎BoardController

package com.freeflux.view.board;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.freeflux.biz.board.BoardVO;
import com.freeflux.biz.board.impl.BoardDAO;
import com.freeflux.biz.board.impl.BoardService;

@Controller
public class BoardController {
	
	@Autowired
	private BoardService boardService;
	
	@ModelAttribute("conditionMap")
	public Map<String, String> searchConditionMap() {
		Map<String, String> conditionMap = new HashMap<String, String>();
		conditionMap.put("제목", "TITLE");
		conditionMap.put("내용", "CONTENT");
		
		return conditionMap;
	}
	
	@RequestMapping(value = "/insertBoard.do")
	 public String insertBoard(BoardVO vo){
		System.out.println("글 등록 처리");
		
		boardService.insertBoard(vo);
		//redirect 접두사 없이 사용할 경우 포워딩 방식
		return "redirect:getBoardList.do";
	}
	
	@RequestMapping(value="/deleteBoard.do")
	public String deleteBoard(BoardVO vo){
		System.out.println("삭제 처리");

		boardService.deleteBoard(vo);
		
		return "redirect: getBoardList.do";
	}
	
	@RequestMapping(value="getBoard.do")
	public String getBoard(BoardVO vo, BoardDAO dao, Model model){
		System.out.println("상세보기 처리");
		
		BoardVO board = boardService.getBoard(vo);
		
		model.addAttribute("board", board);
		
		return "getBoard.jsp";
	}
	
	@RequestMapping(value= "/getBoardList.do")
	public String getBoardList(@RequestParam(value="searchCondition", defaultValue="TITLE") String condition,
														@RequestParam(value="searchKeyword", defaultValue="") String keyword,	
			BoardVO vo, BoardDAO dao, Model model) {
		System.out.println("목록 처리");
        
		List<BoardVO> boardList= boardService.getBoardList(vo);
		
		model.addAttribute("boardList", boardList);
		
		return "getBoardList.jsp";
	}
	
	@RequestMapping("updateBoard.do")
	public String updateBoard(@ModelAttribute("board") BoardVO vo, BoardDAO dao) {
		System.out.println("업데이트 처리");
		
		System.out.print(vo.getContent());
		boardService.updateBoard(vo);
		
		return "redirect:getBoardList.do";
		
	}
	
	public BoardController() {
		// TODO Auto-generated constructor stub
	}

}

 

Comments