2013-09-05 3 views
0

Я хотел бы уточнить и советы вокруг всех обработчиков в моем API слоя, который является набором пакетов:проблем Spring AOP

ox.server.meta.api.v1 
ox.server.meta.api.v2 
ox.server.meta.api.v2_1 
ox.server.meta.api.v2_2 

Я пытался следующий код:

@Pointcut("@annotation(org.springframework.web.bind.annotation.RequestMapping)") 
private void handler() {} 

@Pointcut("within(ox.server.meta.api..*)") 
private void controller() {} 

@Around("handler() && controller()") 
public Object aroundAllHandlers(ProceedingJoinPoint pjp) throws Throwable{ 
    ... 
} 

Инициализация пружины не выполнена:

Initialization of bean failed; nested exception is java.lang.IllegalArgumentException: Pointcut is not well-formed: expecting 'name pattern' at character position 8 
handler() && controller() 
     ^
: 
java.lang.IllegalArgumentException: Pointcut is not well-formed: expecting 'name pattern' at character position 8 
handler() && controller() 

Любая помощь? Я использую Spring 3.1.1.

ответ

2

Обработчик является зарезервированным ключевым словом на языке выражений AspectJ, изменение имени метода должно делать трюк (см. http://www.eclipse.org/aspectj/doc/next/progguide/semantics-pointcuts.html).

@Pointcut("@annotation(org.springframework.web.bind.annotation.RequestMapping)") 
private void apiHandler() {} 

@Pointcut("within(ox.server.meta.api..*)") 
private void controller() {} 

@Around("apiHandler() && controller()") 
public Object aroundAllHandlers(ProceedingJoinPoint pjp) throws Throwable{ 
    ... 
}