【问题标题】:Byte Buddy: Creating class by implementing interface leads to NoClassFoundExceptionByte Buddy:通过实现接口创建类导致NoClassFoundException
【发布时间】:2022-02-02 17:36:56
【问题描述】:

我正在尝试在单元测试中创建一个使用字节伙伴实现接口的类

interface SomeInterface {}

class ByteBuddyTest {

    @Test
    fun byteBuddyTest(){

        val instrumentation = ByteBuddyAgent.install()

        val bb = ByteBuddy()
        val loadedRestController = bb
            .subclass(SomeInterface::class.java)
            .make()
            .load(Object::class.java.classLoader, ClassLoadingStrategy.Default.WRAPPER)
            .loaded

    }
}

不幸的是,我在尝试实现接口时遇到了 NoClassFoundException

org/example/SomeInterface
java.lang.NoClassDefFoundError: org/example/SomeInterface
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
at net.bytebuddy.dynamic.loading.ByteArrayClassLoader.access$300(ByteArrayClassLoader.java:56)
at net.bytebuddy.dynamic.loading.ByteArrayClassLoader$ClassDefinitionAction.run(ByteArrayClassLoader.java:686)
at net.bytebuddy.dynamic.loading.ByteArrayClassLoader$ClassDefinitionAction.run(ByteArrayClassLoader.java:638)
at java.security.AccessController.doPrivileged(Native Method)
at net.bytebuddy.dynamic.loading.ByteArrayClassLoader.doPrivileged(ByteArrayClassLoader.java)
at net.bytebuddy.dynamic.loading.ByteArrayClassLoader.findClass(ByteArrayClassLoader.java:405)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)

我在代理初始化期间是否遗漏了什么?

【问题讨论】:

    标签: kotlin junit5 byte-buddy


    【解决方案1】:

    您正在通过使用将类加载到引导加载程序的子加载程序中

    Object::class.java.classLoader
    

    这个类加载器当然不知道SomeInterface。相反,将该类加载到以下子类中:

    SomeInterface::class.java.classLoader
    

    【讨论】:

    • 非常感谢 :) 我知道我遗漏了一些明显的东西
    猜你喜欢
    • 2016-04-12
    • 1970-01-01
    • 2015-12-25
    • 2023-02-15
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多