복붙노트

[SPRING] 일반 인터페이스에서 작동하지 않는 Pointcut

SPRING

일반 인터페이스에서 작동하지 않는 Pointcut

저는 Spring 프레임 워크 (2.5)를 사용하고 있으며 AOP 기능입니다. 나는 pointcut 표현식을 가지고있다.

@Pointcut("execution(public * org.springframework.batch.item.ItemReader+.read(..))")
public void itemReaderMethods() {}

ItemReader 인터페이스가 Spring 인터페이스이고 서명은 다음과 같습니다.

org.springframework.batch.item.ItemReader<T>

인터페이스에는 'read'라는 메서드가 있는데,이 메서드에 대한 조언을 적용합니다. 메서드 서명은 다음과 같습니다.

org.springframework.batch.item.ItemReader.read()

그러나, 위의 pointcut 표현식을 사용하여 응용 프로그램을 실행할 때 아래 예외가 발생합니다.

java.lang.IllegalArgumentException :이 유형 이름과 일치하는 경고 없음 : org.springframework.batch.item.ItemReader [Xlint : invalidAbsoluteTypeName]

내 생각 엔 ItemReader는 제네릭 인터페이스이므로 pointcut이 제대로 매치되지 않는다. 그렇다면 제네릭 인터페이스와 일치하도록 내 포인트 컷 식을 어떻게 작성할 수 있습니까?

해결법

  1. ==============================

    1.Generics는 나에게 문제가되지 않는 것 같습니다. Map 작업에서 테스트 포인트 컷을 만들 수 있습니다.

    Generics는 나에게 문제가되지 않는 것 같습니다. Map 작업에서 테스트 포인트 컷을 만들 수 있습니다.

    @Around(value="execution(* java.util.Map.size(..))")
    

    Map +를 사용할 필요가 없었습니다 (인터페이스를 사용하고 있기 때문에 가정합니다).지도의 일반적인 특성도 중요하지 않습니다.

    ItemReader 인터페이스 클래스가 사용 가능하고 구현을 사용할 수 있습니까? 그게 오류 메시지가 제안하는 것입니다 (그리고 테스트 포인트 컷트에 더미 클래스 이름을 넣으면 얻을 수 있습니다). 어쩌면 로깅 / 인쇄 시도

    Class.forName("org.springframework.batch.item.ItemReader")
    

    예상되는 구현 클래스에 대해서도 비슷합니까?

  2. from https://stackoverflow.com/questions/1131910/pointcut-not-working-for-generic-interface by cc-by-sa and MIT license