diff --git a/pom.xml b/pom.xml index f8cfcc8..93aa0d9 100644 --- a/pom.xml +++ b/pom.xml @@ -8,9 +8,10 @@ custom-classloader 1.0-SNAPSHOT + - 17 - 17 + 11 + 11 UTF-8 diff --git a/src/main/java/club/shengsheng/MyClassLoader.java b/src/main/java/club/shengsheng/MyClassLoader.java index 21026cf..a68a274 100644 --- a/src/main/java/club/shengsheng/MyClassLoader.java +++ b/src/main/java/club/shengsheng/MyClassLoader.java @@ -1,9 +1,45 @@ package club.shengsheng; -/** - * @author gongxuanzhangmelt@gmail.com - **/ +import java.io.File; +import java.nio.file.Files; + public class MyClassLoader extends ClassLoader { + @Override + protected Class loadClass(String name, boolean resolve) + throws ClassNotFoundException { + synchronized (getClassLoadingLock(name)) { + // First, check if the class has already been loaded + Class c = findLoadedClass(name); + if (c == null) { + if (name.startsWith("tech")) { + c = findClass(name); + } else { + c = getParent().loadClass(name); + } + } + if (resolve) { + resolveClass(c); + } + return c; + } + } + + @Override + protected Class findClass(String name) throws ClassNotFoundException { + String rootFile = System.getProperty("user.dir").concat(".加密".replace('.', File.separatorChar)).concat(".class"); + File classFile = new File(rootFile); + byte[] classBytes; + try { + classBytes = Files.readAllBytes(classFile.toPath()); + for (int i = 0; i < classBytes.length; i++) { + classBytes[i] -= 1; + } + + } catch (Exception e) { + throw new ClassNotFoundException(); + } + return defineClass(name, classBytes, 0, classBytes.length); -} + } +} \ No newline at end of file