From 18a237275a89e3e7f2284f2e0eaaa4dc1ba4f1d4 Mon Sep 17 00:00:00 2001 From: anyifei <904783866@qq.com> Date: Mon, 19 Jan 2026 00:47:25 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat(classloader):=20=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E7=B1=BB=E5=8A=A0=E8=BD=BD=E5=99=A8?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 重写loadClass方法实现类加载逻辑 - 添加对特定包名的类加载支持 - 实现findClass方法从文件系统读取类字节码 - 添加字节码解密处理功能 - 集成同步锁确保类加载线程安全 - 配置外部类文件路径加载机制 --- .../java/club/shengsheng/MyClassLoader.java | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/src/main/java/club/shengsheng/MyClassLoader.java b/src/main/java/club/shengsheng/MyClassLoader.java index 21026cf..7c39820 100644 --- a/src/main/java/club/shengsheng/MyClassLoader.java +++ b/src/main/java/club/shengsheng/MyClassLoader.java @@ -1,9 +1,52 @@ package club.shengsheng; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + /** * @author gongxuanzhangmelt@gmail.com **/ public class MyClassLoader extends ClassLoader { + + @Override + protected Class loadClass(String name, boolean resolve) throws ClassNotFoundException { + synchronized (getClassLoadingLock(name)) { + Class c = findLoadedClass(name); + if (c == null) { + if (name.startsWith("tech.insight.ShengSheng")){ + c = this.findClass(name); + } + else { + c = getParent().loadClass(name); + } + } + return c; + } + } + + @Override + protected Class findClass(String name) throws ClassNotFoundException { + + + File classFile = new File("/Users/anyifei/projects/custom-classloader/加密.class"); + + try { + byte[] bytes = Files.readAllBytes(classFile.toPath()); + byte[] newBytes = new byte[bytes.length]; + for (int i = 0; i < bytes.length; i++) { + byte aByte = bytes[i]; + aByte = (byte) (aByte - 1); + newBytes[i] = aByte; + } + return defineClass(name, newBytes, 0, bytes.length); + }catch (Exception e) { + throw new ClassNotFoundException(name); + } + } } From 982df35715ed707008650a90f8cd01485ffcf0af Mon Sep 17 00:00:00 2001 From: anyifei <904783866@qq.com> Date: Mon, 19 Jan 2026 09:33:27 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix(classloader):=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E5=8A=A0=E5=AF=86=E7=B1=BB=E6=96=87=E4=BB=B6=E8=B7=AF=E5=BE=84?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将硬编码的绝对路径改为相对路径 - 提高了类加载器的可移植性 - 避免了环境依赖问题 --- src/main/java/club/shengsheng/MyClassLoader.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/club/shengsheng/MyClassLoader.java b/src/main/java/club/shengsheng/MyClassLoader.java index 7c39820..da9961a 100644 --- a/src/main/java/club/shengsheng/MyClassLoader.java +++ b/src/main/java/club/shengsheng/MyClassLoader.java @@ -34,7 +34,7 @@ protected Class loadClass(String name, boolean resolve) throws ClassNotFoundE protected Class findClass(String name) throws ClassNotFoundException { - File classFile = new File("/Users/anyifei/projects/custom-classloader/加密.class"); + File classFile = new File("./加密.class"); try { byte[] bytes = Files.readAllBytes(classFile.toPath());