AOP
: Aspect Oriented Programming
사용자의 요구사항 말고 요구사항을 수반하기 위한 코드들(프로그램을 구현하기 위한, 테스트하기 위한 코드들)은 관점이 다른 업무이다.
로그처리, 보안처리, 트랜잭션 처리 등의 주업무가 아닌 업무들을 핵심 로직과 쉽게 빼고 결합시킬 수 있는 방법론,
관점을 어떻게 분리하고 결합시켜 프로그램을 만들것인가에 대한 방법론이 AOP이다.
AOP를 구현시 스프링을 이용하면 쉽게 빼고 꽂을 수 있다.
AOP는 두가지 방법으로 사용 가능하다.
1.configuration에 설정
2.annotation으로 설정
Pointcut
BoardServiceImpl
package com.springbook.biz.board.Impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.springbook.biz.board.BoardService;
import com.springbook.biz.board.BoardVO;
/*
로그 처리를 코드 내에 핵심 로직과 결합하지 않고
이곳에는 핵심 로직만 남긴다
그리고 로그는 Spring AOP에서 자동으로 결합시켜준다
*/
@Service("boardService")
public class BoardServiceImpl implements BoardService {
@Autowired
private BoardDAO boardDAO;
@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);
}
}
aspectjweaver 추가
aop 체크
추가된 aop 확인
aop 동작 시점
applicationContext.xml
모든 메서드 호출 바로 직전에 printLog 메서드를 껴놓겠다.
로그 객체를 핵심 로직에 결합하지 않았지만 aop를 통해 동작한다
get메서드 실행 전에만 로그가 동작하는 것을 확인할 수 있다.
예외를 일부러 발생시키기 위해 코드 추가
(vo 객체 생성시 0으로 초기화되므로 무조건 0)
전 후로 잘 실행된다.