Select most specific advice method in case of override
Closes gh-32865
This commit is contained in:
parent
58da30cd30
commit
ea596aa211
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2023 the original author or authors.
|
* Copyright 2002-2024 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -50,6 +50,7 @@ import org.springframework.core.annotation.AnnotationUtils;
|
||||||
import org.springframework.core.convert.converter.Converter;
|
import org.springframework.core.convert.converter.Converter;
|
||||||
import org.springframework.core.convert.converter.ConvertingComparator;
|
import org.springframework.core.convert.converter.ConvertingComparator;
|
||||||
import org.springframework.lang.Nullable;
|
import org.springframework.lang.Nullable;
|
||||||
|
import org.springframework.util.ClassUtils;
|
||||||
import org.springframework.util.ReflectionUtils;
|
import org.springframework.util.ReflectionUtils;
|
||||||
import org.springframework.util.ReflectionUtils.MethodFilter;
|
import org.springframework.util.ReflectionUtils.MethodFilter;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
|
@ -133,6 +134,7 @@ public class ReflectiveAspectJAdvisorFactory extends AbstractAspectJAdvisorFacto
|
||||||
|
|
||||||
List<Advisor> advisors = new ArrayList<>();
|
List<Advisor> advisors = new ArrayList<>();
|
||||||
for (Method method : getAdvisorMethods(aspectClass)) {
|
for (Method method : getAdvisorMethods(aspectClass)) {
|
||||||
|
if (method.equals(ClassUtils.getMostSpecificMethod(method, aspectClass))) {
|
||||||
// Prior to Spring Framework 5.2.7, advisors.size() was supplied as the declarationOrderInAspect
|
// Prior to Spring Framework 5.2.7, advisors.size() was supplied as the declarationOrderInAspect
|
||||||
// to getAdvisor(...) to represent the "current position" in the declared methods list.
|
// to getAdvisor(...) to represent the "current position" in the declared methods list.
|
||||||
// However, since Java 7 the "current position" is not valid since the JDK no longer
|
// However, since Java 7 the "current position" is not valid since the JDK no longer
|
||||||
|
@ -146,6 +148,7 @@ public class ReflectiveAspectJAdvisorFactory extends AbstractAspectJAdvisorFacto
|
||||||
advisors.add(advisor);
|
advisors.add(advisor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// If it's a per target aspect, emit the dummy instantiating aspect.
|
// If it's a per target aspect, emit the dummy instantiating aspect.
|
||||||
if (!advisors.isEmpty() && lazySingletonAspectInstanceFactory.getAspectMetadata().isLazilyInstantiated()) {
|
if (!advisors.isEmpty() && lazySingletonAspectInstanceFactory.getAspectMetadata().isLazilyInstantiated()) {
|
||||||
|
|
|
@ -770,9 +770,15 @@ abstract class AbstractAspectJAdvisorFactoryTests {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Aspect
|
@Aspect
|
||||||
static class IncrementingAspect extends DoublingAspect {
|
static class IncrementingAspect extends DoublingAspect {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object doubleAge(ProceedingJoinPoint pjp) throws Throwable {
|
||||||
|
return ((int) pjp.proceed()) * 2;
|
||||||
|
}
|
||||||
|
|
||||||
@Around("execution(* getAge())")
|
@Around("execution(* getAge())")
|
||||||
public int incrementAge(ProceedingJoinPoint pjp) throws Throwable {
|
public int incrementAge(ProceedingJoinPoint pjp) throws Throwable {
|
||||||
return ((int) pjp.proceed()) + 1;
|
return ((int) pjp.proceed()) + 1;
|
||||||
|
@ -780,7 +786,6 @@ abstract class AbstractAspectJAdvisorFactoryTests {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Aspect
|
@Aspect
|
||||||
private static class InvocationTrackingAspect {
|
private static class InvocationTrackingAspect {
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue