in bytekit-core/src/main/java/com/alibaba/bytekit/asm/instrument/InstrumentTemplate.java [72:110]
public InstrumentParseResult build() throws IOException {
// 读取jar文件,解析出
InstrumentParseResult result = new InstrumentParseResult();
for (File file : jarFiles) {
JarFile jarFile = null;
try {
jarFile = new JarFile(file);
JarEntry propertiesEntry = jarFile.getJarEntry(INSTRUMENT_PROPERTIES);
// 读配置文件
if (propertiesEntry != null) {
InputStream inputStream = jarFile.getInputStream(propertiesEntry);
Properties properties = PropertiesUtils.loadNotNull(inputStream);
String triggerRetransformValue = properties.getProperty("triggerRetransform", "false"); // 使用默认值避免null值
boolean triggerRetransform = Boolean.parseBoolean(triggerRetransformValue);
for (Pair<String, byte[]> pair : readClassBytes(properties, INSTRUMENT, jarFile)) {
parse(result, pair.second, triggerRetransform);
}
for (Pair<String, byte[]> pair : readClassBytes(properties, DEFINE, jarFile)) {
result.addDefineClass(pair.first, pair.second);
}
}
} finally {
IOUtils.close(jarFile);
}
}
// 处理单独设置 byte[]
for (byte[] classBytes : instrumentClassList) {
parse(result, classBytes, false);
}
return result;
}