2014-03-25 4 views
2

저는 현재 AOP와 그 중요한 부분에 대해 공부하고 있습니다. 조언, 포인트 컷,참여 지점. 나는 무엇에 관한 매우 이해할 수있는 설명을 읽을 조언이 링크에서Pointcuts. Aspect Oriented Programming vs. Object-Oriented Programming가로 세로 좌표 프로그래밍에서 조인 포인트

그러나 난 어려움을 이해하고있다 무엇 가입 지점입니다. 내가 읽은 것에서, Join Points는 프로그램의 구조에서 애스펙트 코드에서 직조 될 수있는 잘 정의 된 위치입니다.

그러나 실제 예제가 나오면 Join Points의 예를 이해하는 데 도움이되는 예제를 찾을 수 없습니다.

위 링크의 예에서 알 수 있듯이 Advice와 Poincuts가 아래에 쓰여있는 경우 Join Points는 어디에 정의합니까?

고전적인 접근 방식 :

void set...(...) { 
    : 
    : 
    Display.update(); 
} 

조언 :

after() : set() { 
    Display.update(); 
} 

Poincuts :

pointcut set() : execution(* set*(*)) && this(MyGraphicsClass) && within(com.company.*); 

답변

2

void set...(...)joinpoint를

입니다

당신은 화면우려 호출되는 우려의 연결하는 포인트 컷joinpoint를

  • 크로스 커팅 우려의 구현입니다 아시다시피.
  • 우려가 첨부 될 클래스 내의 잘 정의 된 위치는 Joinpoint입니다.
  • 구성 또는 코드를 통해 joinpoint가 지정된 위치는 Pointcut입니다.

우려 사항은 하나 이상의 이해 관계자에게 중요한 것입니다. 또한 관심사는 개념적으로 두 카테고리로 분류 될 수있다 (각각의 구현은 동일 할 수있다) :

부작용 : joinpoint를있는 동작을 변경하지 않는 우려 대신 도입 추가 작업.

로깅 문제는 부작용의 좋은 예입니다.

, 이전과 Execute 방법 후 실행할 수 시작 시간/종료 시간/총 시간/년과 같은 사항을 기록합니다 대상 메소드를 호출 할 때마다 (이 joinpoint를하다) BankWithdrawalHandler.Execute(ICommand command) 먼저 호출 우려 LoggingConcern.Execute(ICommand command)

파라미터/아웃 파라미터 등

수있는 부작용 : 필요한 액션

  • 가 검사 추가적인 프로세싱/상기 출력 결과를 캡처하는

    • 가 타겟 포인트 컷의 입력 매개 변수를 캡처/점검 타겟팅 필요한 포인트 컷 액션 추가 처리

    조언 : 잠재적 대상에있어서의 입력 및/또는 출력을 변경한다 우려.

    캐싱 문제는 간단한 예입니다. 런타임에 대상 메서드 (joinpoint) 인 Repository.Find<T>(long id)이 실행될 때마다 CacheConcern.Find<T>(long Id) 메서드가 먼저 실행되도록 구성되어 값이 캐시에없는 경우에만 Repository.Find() 메서드로 계속 호출하도록 허용합니다.

    조언 할 수 있습니다

    • 대상 포인트 컷에 입력 매개 변수를 점검하고
    • 를 필요한 경우 취소 또는 대상 메소드의 실행을 방지하고
    • 검사 다른 구현으로 대체 수정할 대상 메서드의 출력 결과 및 필요에 따라 수정하거나 바꿉니다.

    .NET 내에 구현 된 많은 기술이 있습니다. 포인트 컷을 보내고 :

    • 포스트 구축 IL 직물/PostSharp
    • 종속성 반전 (제어의 반전 (IOC의) 및 종속성 반전 (DI))
    • 차단/DynamicProxy