2016-08-08 2 views
10

메소드 실행 통계를 로깅하는 데 Spring AspectJ를 사용하고 있지만 포인트 컷 식을 변경하지 않고이 클래스의 일부 클래스와 메소드를 제외하고 싶습니다.Spring AOP 일부 클래스 제외

특정 방법을 제외하려면 필자가 걸러내는 맞춤 주석을 만들었습니다. 그러나 나는 수업과 같은 것을 할 수 없다.

@Around("execution(* com.foo.bar.web.controller.*.*(..)) " 
      + "&& [email protected](com.foo.bar.util.NoLogging)") 
public Object log(ProceedingJoinPoint proceedingJoinPoint) throws Throwable { 
    // logging logic here 
} 

NoLogging이 방법을 제외하고 내 사용자 정의 주석입니다 -

여기 내 측면의 정의입니다.

따라서 포인트 컷식을 변경하거나 새로운 권고자를 추가하지 않고 특정 클래스를 필터링 할 수 있습니까?

+0

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/aop.html#aop-pointcuts-designators 내가이 방법을 사용할 수없는 생각, 실행은 정의와 일치하고 그것은 태초에로드됩니다. 어쩌면 새로운 @Around 애스펙트를 만들고 이전 애트리뷰트를 오버라이드 할지를 검사 할 수 있습니다. 그러나 나는 그것의 확실하지 않다. – duardito

답변

12

좋아, 해결책을 찾았습니다. @target PCD (pointcut designators)를 사용하여 특정 주석이있는 클래스를 필터링 할 수 있습니다. 이 경우 이미 사용할 수 있도록 @NoLogging 주석이 있습니다.

@Around("execution(* com.foo.bar.web.controller.*.*(..)) " 
      + "&& [email protected](com.foo.bar.util.NoLogging)" 
      + "&& [email protected](com.foo.bar.util.NoLogging)") 
public Object log(ProceedingJoinPoint proceedingJoinPoint) throws Throwable { 
    // logging logic here 
} 

설명 - -

execution(* com.foo.bar.web.controller.*.*(..)) - 모든 클래스의 모든 메소드

"&& [email protected](com.foo.bar.util.NoLogging)" 패키지 c.f.b.w.controller에 -

그들에 @NoLogging 주석이없는 한 다음과 같이 업데이트 된 pointcut 표현은 될 것입니다

"&& [email protected](com.foo.bar.util.NoLogging)" - 클래스에도 @NoLogging 주석이 없습니다.

이제 aspect에서 제외시킬 메소드가있는 클래스에 @NoLogging 주석을 추가하면됩니다.

더 PCD는 스프링 AOP 문서에서 찾을 수 있습니다 -

3

PCD

Spring AOP documentation 당으로 & & 'ED, ||'에드, 그리고 될 수 있습니다! (부정)도.

그래서 이건 시행 착오 운동에 더 가깝습니다. 나는 당신이 && [email protected] @within과 같은 것을 시도 할 수 있다고 생각합니다. 또는 시도해 볼 수 있습니다 [email protected]

하지만 다시 생각해 보면 까다 롭습니다.

다른 접근법 : 두 개의 pointcut 정의를 선언하고 결합하십시오. 예 : here on the documentation page. 나는 이것을 먼저 시도 할 것이다. 예 :

@Pointcut(executionPC() && nonAnnotatedClassesPC() && nonAnnotatedMethodsPC()) 

면책 조항 : 이것은 말하듯이 시행 착오와 비슷합니다. 그리고 저는 명확한 실례가 없습니다.

+0

감사합니다. 나는 그걸 작동시킬 수있었습니다. –

+0

@HarshilSharma 기꺼이 도와 드리겠습니다. – Atul