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-aop
和 spring-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);
}
}
我在所有 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-aop
和 spring-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);
}
}