java - Spring AOP问题

标签 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。

最佳答案

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

关于java - Spring AOP问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18641228/

相关文章:

java - 使用 Mockito 匹配基于泛型类型的参数

java - junit 测试中 JPA 存储库为空

java - Android onClick启动的两个动画,应该只启动一个

java - 如何在Spring Boot中以Restfull方式将生成的PDF文档发送到前端?

spring - 哪些对象不应该被 Spring 管理?

java - Spring AOP 建议被执行两次

java - 无法检测 Spring AOP 中的类级别自定义注释

java - JNA - 在从 DLL 传回的 C++ 实例上调用方法

java - 如何向 Spring MVC 添加前端

java - 如何让 CommonsPool2TargetSource 池大小根据需要增长?