2012-09-25 5 views
2

나는 Spring AOP에 익숙하다.Spring AOP에서 포인트 컷 지정하기

내 질문에, 클래스의 일부 메소드에 대해 일부 AOP 기능을 원한다면 (모든 것이 아닌) 단일 포인트 컷으로 가능할 수 있습니다. 말해, 내 방법은 save1, save2, get1 및 get2 내 클래스에save1 및 save2 경우 AOP를 적용하려면 어떻게 그 경우에 대한 단일 pointcut 만들 수 있습니까? 내 pointcut 표현식은 어떻게 생겼을 까? 또는 심지어 가능합니까?

답변

1

조언을 적용 할 방법을 선택하려면 포인트 컷 식을 지정해야합니다.

the Spring Documentation에서 7.2.3 포인트 컷 선언을 참조하고 실행 joinpoint 지정자를 사용하여 메소드를 선택하십시오.

1

갖는

**execution(* save*(..))** 

자세한 내용은 here를 참조 트릭을해야하므로 같은 pointcut 표현

2

(AspectJ를 주석과 함께 와일드 카드 표현으로, ..) 그것을 할 수있는 많은 방법 이 있습니다 내가 AspectJ를 함께 예를 줄 것이다

그래서 당신은을 표시 당신이 한 모든 설정입니다
class MyClass{ 
      @MyPoint 
      public void save1(){ 
      } 

      @MyPoint 
      public void save2(){ 
      } 

      public void save3(){ 
      } 

      public void save4(){ 
      } 

} 

@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.METHOD) 
public @interface MyPoint { 
} 

@Aspect 
@Component 
public class MyAspect { 
    @Before("@annotation(com.xyz.MyPoint)") 
    public void before(JoinPoint joinPoint) throws Throwable { 
     //do here what u want 
    } 

} 

annotation, spring은이 메소드의 aspect 이전에 호출 할 것이고, 스프링이이 메소드와 객체를 관리하는지 확인해야한다. 클래스 경로에 AspectJ를 포함

0

당신은 pointcut 표현으로 orand를 사용할 수 있습니다

execution(* my.Class.myMethod(..)) or execution(* my.Class.myOtherMethod(..)) 
+0

Actally 또는 작동하지 않았다가, 사용했다 || 대신 실행 (* my.Class.myMethod (..)) || 실행 (* my.Class.myOtherMethod (..)) – Anand

관련 문제