gpt4 book ai didi

java - 反射和 ByteBuddy

转载 作者:行者123 更新时间:2023-11-30 10:30:11 28 4
gpt4 key购买 nike

如何将 byte-buddy 生成的类与“org.reflections”一起使用?

例子:

    Class<?> dynamicType = new ByteBuddy()
.subclass(Object.class)
.name("de.testing.SomeClass")
.method(ElementMatchers.named("toString"))
.intercept(FixedValue.value("Hello World!"))
.make()
.load(getClass().getClassLoader(),ClassLoadingStrategy.Default.INJECTION)
.getLoaded();

现在我想使用 org.reflections 来查找特定包内对象的所有子类型:

Reflections reflections = new Reflections("de.testing");
Set<Class<? extends Object>> objs = reflections.getSubTypesOf(Object.class);
for (Class clazz : objs ) {
log.info("{}",clazz.getName());
}

有什么想法吗?

最佳答案

正如评论中所建议的,反射通过查询类加载器的资源来扫描类路径。这通常只适用于标准类加载器,而 Byte Buddy 在使用资源扫描找不到它们的内存中创建类。

您可以通过将 Byte Buddy 的类存储在 jar 文件中并使用 URLClassLoader 手动加载此 jar 文件来解决此问题。 Byte Buddy 允许您通过 .make().toJar( ... ) 创建一个 jar。然后,您可以将此类加载器提供给默认情况下仅扫描系统类加载器的反射。

然而,对于一个可以通过在某处显式注册您的类型轻松解决的问题,所有这些看起来确实是一个相当复杂的解决方案。

关于java - 反射和 ByteBuddy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43753117/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com