com.alibaba.bytekit.asm.instrument.InstrumentConfig Maven / Gradle / Ivy
package com.alibaba.bytekit.asm.instrument;
import com.alibaba.bytekit.asm.matcher.ClassMatcher;
import com.alibaba.deps.org.objectweb.asm.tree.ClassNode;
/**
*
* 1. 读properties文件,得到有哪些要增强的类
* 2. 解析到具体的配置,还有读取 byte[]
* 3. 增加一个Transformer,如果有触发,则用 运行时的 byte[] 替换。 这里是否有不同版本的问题?怎么处理?
* 4. 是否支持retransform
*
* 一个 Inst ,对应一个 matcher,然后一个ClassLoader,可能读取出来有多个 Properties。 一个
* Properties里可能有多个 Inst。然后它们是同一个 Transformer ? 有类进来,就先用 matcher来匹配,有匹上的,就处理
*
*
* @author hengyunabc 2020-11-12
*
*/
public class InstrumentConfig {
private boolean updateMajorVersion;
private ClassNode instrumentClassNode;
private ClassMatcher classMatcher;
/**
* 有的类在之前已经被加载到 JVM 里了,需要显式触发 Retransform ,增强的字节码才能生效
*/
private boolean triggerRetransform = false;
public InstrumentConfig(ClassNode instrumentClassNode, ClassMatcher classMatcher) {
this(instrumentClassNode, classMatcher, false, false);
}
public InstrumentConfig(ClassNode instrumentClassNode, ClassMatcher classMatcher, boolean updateMajorVersion, boolean triggerRetransform) {
super();
this.instrumentClassNode = instrumentClassNode;
this.classMatcher = classMatcher;
this.updateMajorVersion = updateMajorVersion;
this.triggerRetransform = triggerRetransform;
}
public ClassNode getInstrumentClassNode() {
return instrumentClassNode;
}
public void setInstrumentClassNode(ClassNode instrumentClassNode) {
this.instrumentClassNode = instrumentClassNode;
}
public ClassMatcher getClassMatcher() {
return classMatcher;
}
public void setClassMatcher(ClassMatcher classMatcher) {
this.classMatcher = classMatcher;
}
public boolean isUpdateMajorVersion() {
return updateMajorVersion;
}
public void setUpdateMajorVersion(boolean updateMajorVersion) {
this.updateMajorVersion = updateMajorVersion;
}
public boolean isTriggerRetransform() {
return triggerRetransform;
}
public void setTriggerRetransform(boolean triggerRetransform) {
this.triggerRetransform = triggerRetransform;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy