2013-05-31 3 views
2

안녕하세요 저는 봄 MVC를 배우기 시작했습니다. 코드를 작성하기에 충분하지만 AOP를 이해하기 힘든 개념으로 이미 확인했습니다. post. 스프링 문서를 살펴 보았습니다. 나는 설명이 평신도 용어로 이해하기 어렵 기 때문에 여전히 혼란 스럽다. AOP는 일반적인 로깅 예제를 가지고 있습니다. 아직도 그 영혼을 이해하지 못했습니다. 당신은 평범한 언어로 그것의 유무에 관계없이 샘플 구현의 개념을 설명해 주시겠습니까? 좋은 튜토리얼에 대한 링크는 환영합니다. 이 게시물이 쓸모 없도록 긴 인수를 게시하지 마십시오. 이것은 설명을위한 것입니다. 그것을 사용하는 Benifits/단점은 지금 무시 될 수 있습니다.스프링 프록시를 사용한 스프링에서의 Aspect Oriented Programming에 대한 설명

답변

3

Aspecting을 정의 할 때 가장 쉬운 방법은 단일 표현식으로 프록시 (또는 프록시)를 정의하는 선언적 방법이라고 생각합니다.

인위적인 상황 :

당신이 '게터'메소드가 호출 횟수를 계산하려는 말, 응용 프로그램의 어떤 getter 메소드. 음, 각각의 'getter'메소드를 개별적으로 찾고 정적 카운터를 증가시킵니다. 그것은 당신에게 받아 들여질 수도 있지만, 그 시점부터 응용 프로그램에 추가되는 각각의 'getter'메소드에 대해서도 동일한 작업을 수행해야합니다. 가로 세로 2 주 가지로 구성되어

:

는 측면을 고려하십시오. 실행되는 코드 인 프록시와 프록시 코드가 적용되는 위치를 알려주는 선언적 표현식.

메서드 호출 전이나 후에 카운터를 자동으로 증가시키는 'getter'에 대해 프록시를 작성할 수 있습니다. 이 프록시의 문제점은 여전히 ​​각 'getter'메소드에 적용해야한다는 것입니다. 이것은 양상이 빛나는 곳입니다. '모든이 getter 용 getter'메소드라는 간단한 정의 (좋아하는 aspecting 라이브러리 표현식 언어를 통해)를 작성할 수 있습니다. SpringAOP를 사용

예 : 예

@Aspect 
public class MyAspect 
{ 
    private static int counter = 0; 

    @Before("execution(* get*())") 
    public void incrementCounterProxy() 
    { 
     counter++; 
    } 
} 

설명 :

제대로 측면을 데리러 당신의 봄 컨테이너와 모든 설정을 가정하면, 이것은 우리의 인위적인 목표를 달성해야한다.

  1. @Aspect은 클래스를 측면 포함 후보 클래스로 표시합니다.
  2. @Before은 프록시 유형을 표시합니다. 메서드의 코드는 대상 메서드 호출 전에 만 수행하는 프록시입니다.
  3. execution(* get*())은 'get'으로 시작하고 매개 변수가없는 메소드의 모든 실행에이 프록시를 적용하는 선언문입니다.
+0

간단한 단순한 설명. 일어나는 일을 이해합니다. Aspect와 프록시가 병합되면, 둘 다 조금씩 할 수 있습니까? 어쨌든 나는 당신의 설명을 대답으로 표시하고 있습니다. 나와 마찬가지로 aspect는 실행할 공통 코드가있는 코드 조각입니다. 반면 프록시는 디자인 .. 내가 맞습니까? –

+2

양상은 2 가지 주요한 것들로 구성됩니다.실행되는 코드 인 프록시와 프록시 코드가 적용되는 위치를 알려주는 선언적 표현식. –

+0

완벽하게 완벽합니다. –

관련 문제