春天的AOP问题

时间:2013-09-05 16:13:18

标签: java spring spring-aop

我想在我的API层中指定和建议所有处理程序,这是一组包:

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{
    ...
}

Spring初始化失败:

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。

1 个答案:

答案 0 :(得分: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{
    ...
}