AOP_Pointcut

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를 통해 동작한다


  • log 객체를 바꿔도(LogMyAdvice로) 잘 작동한다.


  • pointcut을 여러개 만들어서 로그로 지칭할 대상을 만들 수 있다
    특정 메서드 대상으로도 지정 가능하다.

get메서드 실행 전에만 로그가 동작하는 것을 확인할 수 있다.


  • after로 바꾸면 메서드 호출 후에 로깅이 동작한다.


  • after throwing & after

예외를 일부러 발생시키기 위해 코드 추가
(vo 객체 생성시 0으로 초기화되므로 무조건 0)


  • Around

전 후로 잘 실행된다.

좋은 웹페이지 즐겨찾기