gpt4 book ai didi

java - Web服务器中加载的类的注释是com.sun.proxy.$Proxy52?

转载 作者:太空宇宙 更新时间:2023-11-04 13:17:24 24 4
gpt4 key购买 nike

我在 Web 服务器中加载类的注释时遇到问题(使用 maven 和 jersey)。当我获得加载类的注释时,注释的类型是 com.sun.proxy.$Proxy52 并且我无法转换为我们定义的类型。但是如果我在普通的java项目中加载该类,注释的类型就是我们定义的类型。

代码加载类:

 URLClassLoader cl = URLClassLoader.newInstance(new URL[]{Paths.get("C:\\HelloWorld.jar").toUri().toURL()});
addURLToSystemClassLoader(new URL("file:///C:/HelloWorld.jar"));

Class c = cl.loadClass("NewHelloWorldPackage1.Doc_NewDocument1");
Annotation[] aaaa = c.getAnnotations(); // the type of each annotation in aaaa is com.sun.proxy.$Proxy52

以及要加载的类:

import a.b.OtxElement;

@OtxElement((a.b.OtxElementTypes.Otx))
public class Doc_NewDocument1 {
//something to do here...
}

请告诉我有什么区别?我需要获取我们定义的类型。

最佳答案

您在注释类型前面获得代理这一事实应该不重要。它实际上可能会误导您,让您相信这就是您遇到问题的原因。如果像“isAnnotationPresent(..)”这样的东西失败,这不是由于该代理,而是因为您使用多个类加载器多次加载注释类。例如,Jetty 默认优先考虑 WebApp 类加载器。因此,如果您的 Jetty 服务器实例(或 Tomcat 或其他)已经加载了注释类,并且该注释也位于您的 WebApp 的类路径上,那么您可能会遇到诸如“getAnnotation()”不返回任何内容之类的问题。只需确保包含注释的库不会加载两次。

关于java - Web服务器中加载的类的注释是com.sun.proxy.$Proxy52?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33427722/

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