더북(TheBook)

예제 2-31 애스팩트의 다계층 사용이 가능한지 확인

소스 파일 2장\AOP\Aop_02_tests.js

it(‘마지막 어드바이스가 기존 어드바이스에 대해 실행되는 방식으로 체이닝할 수 있다’,
function() {
var adviceFactory = function(adviceID) {
  return (function(targetInfo) {
    executionPoints.push(‘wrappingAdvice - 처음 ‘ + adviceID);
    targetInfo.fn();
    executionPoints.push(‘wrappingAdvice - 끝 ‘ + adviceID);
  });
};
Aop.around(‘targetFn’,adviceFactory(‘안쪽’), targetObj);
Aop.around(‘targetFn’,adviceFactory(‘바깥쪽’), targetObj);
targetObj.targetFn();
expect(executionPoints).toEqual([
‘wrappingAdvice - 처음 바깥쪽’,
‘wrappingAdvice - 처음 안쪽’,
‘targetFn’,
‘wrappingAdvice - 끝 안쪽’,
‘wrappingAdvice - 끝 바깥쪽’]);
});

테스트는 성공한다. 다음은 타깃에 인자를 넘기는 부분을 구현한다. 어드바이스는 아직 인자에 대해서는 아무것도 모른다. 어드바이스에 인자를 넘겨줘야 어드바이스도 계속 인자를 전달할 수 있다. 어드바이스가 포착한 targetInfo 객체에 args 프로퍼티를 간단히 하나 더 추가하면 된다. 다음과 같은 모습일 것이다.

{ fn: targetFunction, args: argumentsToPassToTarget }

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.