gpt4 book ai didi

java - 使用代理时,接口(interface)在 ClassLoader 中不可见?

转载 作者:搜寻专家 更新时间:2023-10-30 19:42:27 24 4
gpt4 key购买 nike

当我尝试使用动态代理时,我看到以下异常

 com.intellij.rt.execution.application.AppMain DynamicProxy.DynamicProxy
Exception in thread "main" java.lang.IllegalArgumentException: interface Interfaces.IPerson is not visible from class loader
at java.lang.reflect.Proxy.getProxyClass(Proxy.java:353)
at java.lang.reflect.Proxy.newProxyInstance(Proxy.java:581)
at DynamicProxy.Creator.getProxy(Creator.java:18)
at DynamicProxy.DynamicProxy.main(DynamicProxy.java:54)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

知道我需要做什么来解决它

最佳答案

如果这是 web 应用程序,那么在创建动态代理时应该使用 web 应用程序类加载器。因此,例如代替:

Proxy.newProxyInstance(
ClassLoader.getSystemClassLoader(),
new Class < ? >[] {MyInterface.class},
new InvocationHandler() {
// (...)
});

尝试:

Proxy.newProxyInstance(
this.getClass().getClassLoader(), // here is the trick
new Class < ? >[] {MyInterface.class},
new InvocationHandler() {
// (...)
});

例如,tomcat 类加载器的层次结构(其他 Web 容器也有类似的层次结构)如下:

      Bootstrap
|
System
|
Common
/ \
Webapp1 Webapp2 ...

它是 webapp 类加载器,它包含 Web 应用程序/WEB-INF/classes 目录中的类和资源,以及 Web 应用程序/WEB-INF/lib 目录下的 JAR 文件中的类和资源。

关于java - 使用代理时,接口(interface)在 ClassLoader 中不可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/211176/

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