2010-07-29 3 views
1

내 LoggingAspect 클래스에 아래의 코드를 가지고 내가내 @Around 조언 패키지

gov.ssa.rome.service처럼 내 방법에 대한 실행하려면이 기대 오전의 모든 메소드에 대해 호출되지 않습니다. impl.save() gov.ssa.rome.dao.impl.save()

무엇이든지 상관없이 실행 중입니다. 나는 이유를 모른다. 나는 dao를 servcice 레이어에 연결하는 데 autowire를 사용했습니다. 도와 주셔서 정말 고맙습니다.

모든 응용 프로그램 흐름에서이 메서드를 실행하여 로그의 흐름을 보려면 어떻게해야합니까?

@Around("execution(* gov.ssa.rome..*.*(..))") 
public Object log(ProceedingJoinPoint pjp) throws Throwable { 

System.out.println("aspect Around started"); 

     Object ret = pjp.proceed(); 

    System.out.println("aspect Around ended); 

    return ret; 
} 

답변

2

여러 가지 기술을 사용하여 여러 가지 측면을 만들 수 있습니다. JDK 프록시 인 경우 인터페이스에 정의 된 메소드에서만 작동합니다. 그들이 cglib 프록시라면, 그들은 최종 방법을 제외한 모든 방법을 위해 일할 것입니다. 나는 스프링이 기본적으로 JDK 프록시를 사용한다고 생각한다. 일치하는 클래스가 인터페이스와 cglib 프록시를 구현한다면 그렇지 않다.

세이브 방법이있는 클래스가 어떤 모양인지, 세이브가 인터페이스에서 제공되는지 확인하십시오. aspectjweaver 프록시를 적용하여 모든 것을 작동시킬 수는 있지만 바이트 코드 조작이 필요합니다. JDK 프록시를 고수하고 필요한 경우 인터페이스를 생성/확장하는 것이 좋습니다. 자세한 정보는 스프링 문서 AOP 장을 참조하십시오.