Object[] elements = new Object[3];//定义存放代理对象的数组
ShapeProxyHandler proxyHandler1 = new ShapeProxyHandler(new Circle());
Object proxy1 = Proxy.newProxyInstance(null, new Class[] { Shape.class } , proxyHandler1);
elements[0] = proxy1;
这段代码,其中Circle是我自己定义的本包的类,Shape是Cirlce的父类(抽象类)
执行的时候,出现如下错误
Exception in thread "main" java.lang.IllegalArgumentException: class reflect.Circle is not visible from class loader
at java.lang.reflect.Proxy.getProxyClass(Unknown Source)
at java.lang.reflect.Proxy.newProxyInstance(Unknown Source)
at reflect.ProxyTestShape.main(ProxyTestShape.java:13)
感觉是默认的类加载器,找不到这个reflect.Circle,查看Proxy的getProxy方法,看到这句代码
String interfaceName = interfaces[i].getName();
Class interfaceClass = null;
try {
interfaceClass = Class.forName(interfaceName, false, loader);
} catch (ClassNotFoundException e) {
}
if (interfaceClass != interfaces[i]) {
throw new IllegalArgumentException(
interfaces[i] + " is not visible from class loader");
}
/*
* Verify that the Class object actually represents an
* interface.
*/
if (!interfaceClass.isInterface()) {
throw new IllegalArgumentException(
interfaceClass.getName() + " is not an interface");
}
应该是里面的这句
interfaceClass = Class.forName(interfaceName, false, loader);
和这句
if (interfaceClass != interfaces[i]) {
throw new IllegalArgumentException(
interfaces[i] + " is not visible from class loader");
}
从代码来看,应该加载进来的interfaceClass 和我传递进去的Shape.class不一样,这个要怎么解决呢?是类加载器的问题吗?
分享到:
相关推荐
- **自定义代码生成**:通过编写代码来手动生成代理类的字节码。 ##### 2.2 动态代理的概念 动态代理允许我们为一个接口创建一个代理类,代理类可以是任何接口的实现。当我们调用代理类的方法时,它会调用预先定义...
关于"权限问题.txt",这可能是指在执行Java代理时遇到的权限相关问题。在Lotus Domino中,每个代理都有一个执行级别,如服务器、管理员或用户。根据代理的安全设置,它可能需要特定级别的权限才能访问某些资源或执行...
1. **代理类继承自`Proxy`类**:每一个动态代理类都是`Proxy`类的子类,这意味着它们继承了`Proxy`类中的所有属性和方法。 2. **代理类实现了目标接口**:动态代理类会实现用户指定的目标接口,这样就可以像操作原始...
### Domino Java 代理实现 FTP 上传下载 #### 知识点概述 在当前的企业级应用环境中,文件传输协议(FTP)依然是一种常见的数据交换方式。本文档主要介绍如何使用 Java 实现与 FTP 服务器的交互功能,具体包括上传...
以下是一些在Java面试中经常出现的问题,包括基础、中等和难题,以及一些常见的思考题。 **基础问题:** 1. **Java是什么?** Java是一种跨平台、面向对象的编程语言,由Sun Microsystems(现为Oracle ...
PortGroper 是一款java写的开源拒绝服务测试工具,它不是僵尸网络类的ddos,而是使用大量的代理作为bots发起DDOS。Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是...
1. **异常处理**:网络请求可能会遇到各种问题,如连接超时、无法解析的URL等,因此需要编写完善的异常处理机制,确保程序的健壮性。 2. **多线程**:为了提高抓取效率,我们可以使用多线程同时处理多个图片的下载...
2. 生成Java客户端代理类:使用Java的wsimport工具(通常在JDK的bin目录下),通过WSDL地址生成Java客户端代理类。这个工具会根据WSDL自动生成服务接口和服务实现,让你能够像调用本地方法一样调用远程WebService。 ...
它包含了丰富的Java知识和面试常见问题,以Markdown格式编写,易于阅读和整理。让我们深入探讨一下这个资源可能涵盖的Java知识点。 1. **基础语法**:这部分可能包含Java的基础概念,如变量、数据类型、运算符、...
动态代理模式的核心在于能够在运行时动态创建一个实现指定接口的代理类,这个代理类可以对目标对象的方法调用进行额外的处理,如添加日志、性能监控、事务管理等。在Java中,我们可以使用Proxy类和InvocationHandler...
在调用Web服务过程中,可能会遇到网络错误、服务不可用、数据格式错误等问题,需要编写异常处理代码,捕获并处理可能出现的异常。 总结,Java调用WebService工程涉及到的知识点包括JAX-WS和JAX-RS的使用、...
《Java深度历险》是一本全面探讨Java技术的书籍,主要关注Java虚拟机(JVM)的深入理解和相关概念。...通过学习这些内容,读者不仅可以编写出更高效的代码,还能更好地理解和解决Java开发中遇到的各种问题。
使用.NET SDK中的`wsdl.exe`工具,可以自动生成与Java WebService接口匹配的代理类。例如,打开命令行窗口,然后运行以下命令: ```bash wsdl /out:IgetPrintInOfcService.cs ...
PortGroper 是一款java写的开源拒绝服务测试工具,它不是僵尸网络类的ddos,而是使用大量的代理作为bots发起DDOS。Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是...
在准备Java程序员的面试...以上是Java程序员面试中可能会遇到的一些技术问题和解析,理解并掌握这些知识点将有助于你在面试中表现出色。记住,真实的能力和经验才是面试的关键,适当展示自己的优势,同时诚实面对不足。
PortGroper 是一款java写的开源拒绝服务测试工具,它不是僵尸网络类的ddos,而是使用大量的代理作为bots发起DDOS。Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是...
这份"Java面试题和JSP网页编程及常见问题word文档"包含了Java开发者在面试中可能遇到的关键问题以及JSP(JavaServer Pages)网页编程的实践指南。 1. **Java面试题**: - **基础概念**:面试通常会考察Java的基础...
PortGroper 是一款java写的开源拒绝服务测试工具,它不是僵尸网络类的ddos,而是使用大量的代理作为bots发起DDOS。Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是...
同时,了解这些源码也有助于提高问题排查能力,当遇到异常或性能问题时,能够深入底层找到原因。此外,对SDK源代码的学习也能帮助开发者遵循最佳实践,编写出更高效、更健壮的Java代码。总的来说,深入理解和研究...