2013-09-05 129 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{ 
    ... 
}