Skip to content

Commit cd390e5

Browse files
committed
Rollback changes.
1 parent 394ddc2 commit cd390e5

File tree

1 file changed

+29
-7
lines changed

1 file changed

+29
-7
lines changed

apm-sniffer/apm-sdk-plugin/spring-plugins/core-patch/src/main/java/org/apache/skywalking/apm/plugin/spring/patch/CreateAopProxyInterceptor.java

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,14 @@
1818

1919
package org.apache.skywalking.apm.plugin.spring.patch;
2020

21-
import java.lang.reflect.Method;
2221
import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
2322
import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor;
2423
import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult;
24+
import org.springframework.aop.SpringProxy;
2525
import org.springframework.aop.framework.AdvisedSupport;
2626

27+
import java.lang.reflect.Method;
28+
2729
/**
2830
* <code>CreateAopProxyInterceptor</code> check that the bean has been implement {@link EnhancedInstance}.
2931
* if yes, true will be returned.
@@ -32,25 +34,45 @@ public class CreateAopProxyInterceptor implements InstanceMethodsAroundIntercept
3234

3335
@Override
3436
public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class<?>[] argumentsTypes,
35-
MethodInterceptResult result) throws Throwable {
37+
MethodInterceptResult result) throws Throwable {
3638

3739
}
3840

3941
@Override
4042
public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class<?>[] argumentsTypes,
41-
Object ret) throws Throwable {
43+
Object ret) throws Throwable {
4244
AdvisedSupport advisedSupport = (AdvisedSupport) allArguments[0];
4345

44-
Class targetClass = advisedSupport.getTargetClass();
45-
if (targetClass != null && EnhancedInstance.class.isAssignableFrom(targetClass)) {
46-
return true;
46+
if (maybeHasUserSuppliedProxyInterfaces(ret)) {
47+
Class targetClass = advisedSupport.getTargetClass();
48+
if (targetClass != null) {
49+
if (onlyImplementsEnhancedInstance(advisedSupport) || onlyImplementsEnhancedInstanceAndSpringProxy(advisedSupport)) {
50+
return true;
51+
}
52+
}
4753
}
4854
return ret;
4955
}
5056

57+
private boolean maybeHasUserSuppliedProxyInterfaces(Object ret) {
58+
return !(Boolean) ret;
59+
}
60+
61+
private boolean onlyImplementsEnhancedInstanceAndSpringProxy(AdvisedSupport advisedSupport) {
62+
Class<?>[] ifcs = advisedSupport.getProxiedInterfaces();
63+
Class targetClass = advisedSupport.getTargetClass();
64+
return ifcs.length == 2 && EnhancedInstance.class.isAssignableFrom(targetClass) && SpringProxy.class.isAssignableFrom(targetClass);
65+
}
66+
67+
private boolean onlyImplementsEnhancedInstance(AdvisedSupport advisedSupport) {
68+
Class<?>[] ifcs = advisedSupport.getProxiedInterfaces();
69+
Class targetClass = advisedSupport.getTargetClass();
70+
return ifcs.length == 1 && EnhancedInstance.class.isAssignableFrom(targetClass);
71+
}
72+
5173
@Override
5274
public void handleMethodException(EnhancedInstance objInst, Method method, Object[] allArguments,
53-
Class<?>[] argumentsTypes, Throwable t) {
75+
Class<?>[] argumentsTypes, Throwable t) {
5476

5577
}
5678
}

0 commit comments

Comments
 (0)