I'm trying to load some java built-in classes like Object and Calendar
Class<?> proxied = new ByteBuddy()
.subclass(Calendar.class)
.method(ElementMatchers.not(ElementMatchers.isClone().or(ElementMatchers.isFinalizer()).or(ElementMatchers.isEquals()).or(ElementMatchers.isHashCode()).or(ElementMatchers.isToString())))
.intercept(MethodDelegation.to(new MyMethodInterceptor()))
.make()
.load(Calendar.class.getClassLoader(), ClassLoadingStrategy.Default.WRAPPER)
.getLoaded();
When using Calendar.class.getClassLoader()
, it will fail.
Caused by: java.lang.ClassNotFoundException:
at net.bytebuddy.dynamic.loading.ByteArrayClassLoader.findClass(ByteArrayClassLoader.java:403)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
... 15 more
However, if I change the classLoader to ClassLoader.getSystemClassLoader()
it works good.
Here's a post I found SystemClassLoader vs obj.getClass.getClassLoader().
Can someone help explain the reason behind it?