Skip to content

Commit 76d87e7

Browse files
committed
恢复Advice的懒加载逻辑,修复懒加载所带来的信息污染问题
1 parent 63bed77 commit 76d87e7

File tree

2 files changed

+23
-10
lines changed

2 files changed

+23
-10
lines changed

sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/listener/ext/Advice.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.alibaba.jvm.sandbox.api.event.Event;
44
import com.alibaba.jvm.sandbox.api.event.InvokeEvent;
5+
import com.alibaba.jvm.sandbox.api.util.LazyGet;
56

67
import java.util.ArrayList;
78
import java.util.HashSet;
@@ -20,7 +21,7 @@ public class Advice implements Attachment {
2021
private final int invokeId;
2122

2223
private final ClassLoader loader;
23-
private final Behavior behavior;
24+
private final LazyGet<Behavior> behaviorLazyGet;
2425
private final Object[] parameterArray;
2526
private final Object target;
2627

@@ -39,20 +40,20 @@ public class Advice implements Attachment {
3940
*
4041
* @param processId {@link InvokeEvent#processId}
4142
* @param invokeId {@link InvokeEvent#invokeId}
42-
* @param behavior 触发事件的行为
43+
* @param behaviorLazyGet 触发事件的行为(懒加载)
4344
* @param loader 触发事件的行为所在ClassLoader
4445
* @param parameterArray 触发事件的行为入参
4546
* @param target 触发事件所归属的对象实例
4647
*/
4748
Advice(final int processId,
4849
final int invokeId,
49-
final Behavior behavior,
50+
final LazyGet<Behavior> behaviorLazyGet,
5051
final ClassLoader loader,
5152
final Object[] parameterArray,
5253
final Object target) {
5354
this.processId = processId;
5455
this.invokeId = invokeId;
55-
this.behavior = behavior;
56+
this.behaviorLazyGet = behaviorLazyGet;
5657
this.loader = loader;
5758
this.parameterArray = parameterArray;
5859
this.target = target;
@@ -140,7 +141,7 @@ public int getInvokeId() {
140141
* @return 触发事件的行为
141142
*/
142143
public Behavior getBehavior() {
143-
return behavior;
144+
return behaviorLazyGet.get();
144145
}
145146

146147
/**

sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener.java

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.alibaba.jvm.sandbox.api.util.BehaviorDescriptor;
66
import com.alibaba.jvm.sandbox.api.util.CacheGet;
77
import com.alibaba.jvm.sandbox.api.util.GaStringUtils;
8+
import com.alibaba.jvm.sandbox.api.util.LazyGet;
89

910
import java.lang.reflect.Constructor;
1011
import java.lang.reflect.Method;
@@ -57,11 +58,22 @@ private void switchEvent(final OpStack opStack,
5758
final Advice advice = new Advice(
5859
bEvent.processId,
5960
bEvent.invokeId,
60-
toBehavior(
61-
toClass(loader, bEvent.javaClassName),
62-
bEvent.javaMethodName,
63-
bEvent.javaMethodDesc
64-
),
61+
new LazyGet<Behavior>() {
62+
63+
private final ClassLoader _loader = loader;
64+
private final String _javaClassName = bEvent.javaClassName;
65+
private final String _javaMethodName = bEvent.javaMethodName;
66+
private final String _javaMethodDesc = bEvent.javaMethodDesc;
67+
68+
@Override
69+
protected Behavior initialValue() throws Throwable {
70+
return toBehavior(
71+
toClass(_loader, _javaClassName),
72+
_javaMethodName,
73+
_javaMethodDesc
74+
);
75+
}
76+
},
6577
loader,
6678
bEvent.argumentArray,
6779
bEvent.target

0 commit comments

Comments
 (0)