一处是索引删除的处理,另外一处是jdk8反射兼容
if (dao.meta().isSqlServer()) {
delSqls.add(Sqls.createf("DROP INDEX %s.%s", getTableName(dao, en, t), indexName));
} else if (dao.meta().isMySql()) {
delSqls.add(Sqls.createf("ALTER TABLE %s DROP INDEX %s", getTableName(dao, en, t), indexName));
} else {
delSqls.add(Sqls.createf("DROP INDEX %s", indexName));
}
// 缓存 MethodHandles.Lookup.defineClass 方法(JDK 9+),若不存在则为 null
private static final Method LOOKUP_DEFINE_CLASS_METHOD;
// 缓存 ClassLoader.defineClass 方法(作为备选,JDK 1.0 起就有)
private static final Method CLASSLOADER_DEFINE_CLASS_METHOD;
protected static ProtectionDomain PROTECTION_DOMAIN;
static {
// 初始化保护域
PROTECTION_DOMAIN = getProtectionDomain(ReflectTool.class);
// 1. 尝试获取 MethodHandles.Lookup.defineClass (JDK 9+)
Method lookupMethod = null;
try {
Class<?> lookupClass = Class.forName("java.lang.invoke.MethodHandles$Lookup");
lookupMethod = lookupClass.getMethod("defineClass", byte[].class);
} catch (Throwable e) {
// JDK 8 及以下没有该方法,忽略
}
LOOKUP_DEFINE_CLASS_METHOD = lookupMethod;
// 2. 初始化 ClassLoader.defineClass 反射方法(始终可用)
Method clMethod = null;
try {
Class<?> loaderClass = Class.forName("java.lang.ClassLoader");
clMethod = loaderClass.getDeclaredMethod("defineClass", String.class, byte[].class, int.class, int.class,
ProtectionDomain.class);
clMethod.setAccessible(true);
} catch (Throwable e) {
// 理论上不会发生
}
CLASSLOADER_DEFINE_CLASS_METHOD = clMethod;
}
