클래스의 모든 메소드와 일치하는 pointcut을 정의하려고했지만 작동하지 않았습니다. 나는 이유를 알아 내기 위해 열심히 노력했다. 그리고 결국 정의한 pointcut 표현의 오류 지점을 발견했습니다.Pointcut 표현식에서 두 개의 연속 된 별표는 무엇을 의미합니까?
다음은 내가 처음 정의한 것의 시작입니다.
내가 알고 있었던 것처럼@Pointcut("execution(** membership.data.MemberRepository.*(..))")
가에서 연속 두 개의 별표 "실행 (**"모든 액세스 수정 및 반환 유형을 의미합니다 (작동하지 않습니다)하지만, 그것은 반환 형식의 어떤 종류가 몇 가지 방법과 일치하지 이 같은 : 한편
public List<MemberVO> findByName(String name) { ...
, 그것은이 같은 다른 일치 :
public String print(String str) { ...
을 그리고 그 다음은 내가 발견을 정의하는 적절한 방법의 시작이다이 일치합니다. 위의 두 가지 방법으로 서명하고 잘 작동합니다.
@Pointcut("execution(public * membership.data.MemberRepository.*(..))")
@Pointcut("execution(* membership.data.MemberRepository.*(..))")
내가 무엇이 누락 되었습니까? 나는 대답을 찾기 위해 열심히 노력했지만 결코 나타나지 않았다. "** 실행 ("나의 정확한 의미를 알려주세요
추가 :. 화면 클래스
@Aspect
public class PerformanceLogger {
@Pointcut("execution(* membership.data.MemberRepository.*(..))")
public void performance() {}
@Around("performance()")
public Object watchPerformance(ProceedingJoinPoint jp) {
try {
long st = System.nanoTime();
Object obj = jp.proceed();
System.out.println(jp.toShortString() + " called :" + (System.nanoTime() - st));
return obj;
} catch (Throwable e) {
throw new RuntimeException(e);
}
}
}
두 개의'*'사이에 공백이있을 수 있습니까? – Andreas
@Andreas이 두 가지 사이에 공백을 넣으려고했습니다. "실행 (* * ..") 및 포인트 컷식이있는 aspect bean을 초기화하는 동안 예외가 발생했습니다. – ParkCheolu
왜 전체 pointcut을 공유하지 않습니까? 메소드 시그너처를 사용하면 의미있는 답변을 얻지 못할 것입니다. [SO에 대한 질문 방법] (http://stackoverflow.com/help/how-to-ask)을 배우고 [최소, 완전 및 검증 할 수있는 예제] (http://stackoverflow.com/help/mcve). 감사합니다. 오 그런데 : ** 모든 의미는 없습니다. 이미 말씀 드릴 수 있습니다. 문제는에 있습니다. – kriegaex