Spring AOP failure on startup: NoSuchMethodError: org.springframework.core.annotation.OrderUtils.getOrder

Spring AOP failure on startup: NoSuchMethodError: org.springframework.core.annotation.OrderUtils.getOrder

我在所有 RestController 注释的控制器中有一个切入点的方面:

@Aspect
@Component
public class ControllerLoggingAspect {
    Logger log = LoggerFactory.getLogger(this.getClass());

    @Pointcut("within(@org.springframework.web.bind.annotation.RestController *)")
    public void controller() {
    }

    @Before("controller()")
    public void logBefore(JoinPoint joinPoint) {
        log.info("START REST CONTROLLER");
    }

    @After("controller()")
    public void logAfter(JoinPoint joinPoint) {
        log.info("END REST CONTROLLER");
    }
}

pom 依赖项:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aop</artifactId>
    <version>5.0.1.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.8.12</version>
</dependency>
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjrt</artifactId>
    <version>1.7.3</version>
</dependency>

我在日志中收到以下错误: NoSuchMethodError: org.springframework.core.annotation.OrderUtils.getOrder

我可以验证我的项目中确实有 OrderUtils class 和 getOrder 方法。

如果我删除 @Before@After 注释方法,Spring 启动时不会出现错误。

有人知道我遗漏了什么吗?

原来我的 spring-aopspring-core 依赖项之间的版本不同。修复它们以匹配导致 AOP 按预期工作。

为注释后的 AOP class:

@Aspect
@Configuration
public class AfterAopAspect {

    private Logger logger = LoggerFactory.getLogger(this.getClass());

    @AfterReturning(value = "execution(* com.alok.*.*(..))", returning = "result")
    public void afterReturning(JoinPoint joinPoint, Object result) {
        logger.info("{} returned with value {}", joinPoint, result);
    }

    @After(value = "execution(* com.alok.*.*(..))")
    public void after(JoinPoint joinPoint) {
        logger.info("after execution of {}", joinPoint);
    }
}