`
iNexus
  • 浏览: 195529 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

为何使用URLClassLoader无法加载类?

阅读更多

昨晚遇到一个特别无泪的问题,正如那句话:越诡异的问题越是简单,这里的简单是指问题原因……

 

目标是做一个对现有Web Service类进行分析,然后用aspectJ插入一些功能代码的Eclipse插件。其中用到了URLClassLoader加载web service的类,出现问题后我单独把这段加载类文件的代码写了一个类用来调试,如下:

 

package test;

import java.io.File;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;

public class Test {
	public static void main(String[] a){
		try {
			URL u = new File("D:\\Workspaces\\runtime-EclipseApplication\\hello\\bin").toURL();
			ArrayList listofURLs = new ArrayList();
           listofURLs.add(u);
           
           URL[] url=(URL[])listofURLs.toArray(new URL[listofURLs.size()]);
           
           ClassLoader loader = new URLClassLoader(url);
          
			Class clazz = Class.forName("hello.Hello",true,loader);
			
			Method[] methods = null;
			methods = clazz.getMethods();
			System.out.println("===Test:"+methods[0].getName());
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

 

一般网上的代码都是载入jar包的,我这样获得类对象的要注意一个问题:

第13行:文件路径只要指到工程根目录下即可,即如果是Eclipse工程,指到bin目录,即可;

第21行:由于Class.forName找的是Class文件,所以一定会带这包名找,不要漏掉。

 

问题很简单,我错了……

 

分享到:
评论

相关推荐

    Java URLClassLoader动态加载jar包1

    Java URLClassLoader 是Java标准库中的一个类加载器,它允许我们动态地从指定的URL位置加载类和资源。这个功能在开发插件系统、热部署或者处理多种版本库的场景中非常有用。从JDK 1.2开始,`java.net.URLClassLoader...

    使用URLClassLoader加载本地文件夹c盘下的test.jar文件

    本篇文章将深入讲解如何使用URLClassLoader加载C盘下的test.jar文件。 首先,了解类加载器的基本概念。在Java中,类加载器是负责查找并加载类的机制。Java虚拟机(JVM)使用一系列的类加载器,包括Bootstrap ...

    Springboot + Hutool-db 使用 URLClassLoader 动态加载外部数据库和数据池 jar包实例

    2. 编写Java代码,使用URLClassLoader加载这个jar包。你需要指定jar包的本地路径,创建一个新的URL对象,并使用URLClassLoader的`newInstance`方法来实例化一个新的类加载器。 3. 使用加载后的类加载器,动态地加载...

    URLClassLoader中指定目录和jar的问题

    在Java编程语言中,`URLClassLoader`是Java标准类加载器的一种实现,它负责从指定的URL(统一资源定位符)加载类和资源。本文将深入探讨`URLClassLoader`的工作原理,以及如何处理指定目录和JAR文件中的类加载问题。...

    URLClassLoader初体验

    这篇博客文章“URLClassLoader初体验”可能深入探讨了如何使用`URLClassLoader`来动态加载类和资源,以及它在实际开发中的应用。下面我们将详细探讨`URLClassLoader`的相关知识点。 首先,`URLClassLoader`是Java...

    动态加载类机制JAVA

    在Java编程语言中,动态加载类机制是一种强大的功能,它允许程序在运行时根据需要加载新的类或资源,而不是在编译时确定所有类。这种技术对于提高软件的灵活性、可扩展性和模块化至关重要,特别是在大型系统和插件式...

    java反序列化漏洞URLClassLoader利用1

    `URLClassLoader`是Java中的一个类加载器,它可以从指定的URL列表中加载类。在描述中提到的执行链,实际上是一个精心构造的Java反射调用序列,用于创建`URLClassLoader`实例,然后通过这个类加载器加载并执行自定义...

    动态编译、加载java类

    在Java编程中,动态编译和加载类是一种高级特性,它允许程序在运行时编译源代码并将其加载到Java虚拟机(JVM)中。这种能力对于开发灵活性高、可扩展性强的应用程序非常有用,比如在服务器端处理动态生成的代码、...

    Java 自动加载JAR文件并运行其中的类方法

    3. **加载类**:使用加载的类加载器,我们可以加载JAR中的类。例如,如果我们知道类名为`com.example.MyClass`,我们可以这样加载: ```java String className = "com.example.MyClass"; Class<?> clazz = ...

    java类加载机制原理与实现

    然而,双亲委派机制也可以被破坏,例如使用 URLClassLoader 加载类,这可以使得类加载器不遵守双亲委派机制的规则。 在 Java 中,了解类加载机制非常重要,因为它关系到 Java 程序的执行和安全性。理解类加载机制...

    JAVA 类加载机制分析

    自定义类加载器(Custom ClassLoader)允许开发人员扩展加载类的行为,例如使用`URLClassLoader`从指定的URL加载类。类加载的层次结构(hierarchy)从引导类加载器开始,然后是扩展类加载器(ExtClassLoader),最后...

    Java虚拟机JVM类加载初始化

    - 网络加载:使用`java.net.URLClassLoader`从网络指定的URL加载类。 - 压缩文件加载:从`.jar`、`.zip`等压缩文件中查找并加载类,自动解析`.jar`文件中的`.class`文件。 - 动态编译:从`.java`源代码文件编译成...

    ClassLoaderTest:测试如何正确关闭类加载器,以便可以关闭基础jar文件上的文件句柄

    在Java编程中,类加载器(ClassLoader)是一个关键组件,负责加载类到JVM(Java虚拟机)中。`ClassLoaderTest`是一个特定的测试用例,专注于如何有效地管理和关闭类加载器,以防止资源泄漏,特别是针对加载了基础jar...

    Java类加载原理解析文档

    这意味着当一个类加载器收到加载类的请求时,它会先委托给其父类加载器尝试加载。只有当父类加载器无法找到并加载该类时,当前类加载器才会尝试自己加载。这种机制确保了Java核心类库的一致性,防止用户自定义类覆盖...

    dynamic-load-class-parent.zip

    JAR文件可以通过`JarURLConnection`与URLClassLoader配合使用,实现从JAR中动态加载类。 9. **模块系统(Module System)**: Java 9引入了模块系统,它对类的加载和可见性进行了更细粒度的控制。在模块化环境中,动态...

    java classLoader 的全面讲解

    2. 双亲委派模型:当一个类加载器接收到加载类的请求时,它首先会将任务委托给父类加载器,只有当父类加载器无法加载时,子类加载器才会尝试自己加载,这种机制避免了类的重复加载,并保证了核心库的稳定性。...

    java 类加载器 双亲委派 根加载器、扩展类加载器、系统类加载器

    类加载器通过完全限定名(比如,com.mypak.module1.MyClass)来加载类,它使类可以动态加载类到jvm中,java并未规定类的位置,可以来自本地文件系统,也可以来自网络。 加载器分类 类加载器分为根加载器(bootstrap ...

    Java类加载器(ClassLoader)1

    - 自定义加载器通常用于隔离加载类、改变加载方式、扩展加载源、防止源码泄露等场景。 - 实现自定义类加载器时,建议在JDK1.2后重写findClass()方法而非loadClass(),以避免复杂的操作。 **常用方法**: - `...

    jvm 加载class文件

    Java类加载器是JVM的重要组成部分之一,它负责查找并加载类文件到JVM的内存空间中。Java程序的运行依赖于类加载器将`.class`文件加载到JVM中,并对其进行验证、准备和解析等步骤,最终使类能够在JVM中执行。 #### ...

    加载jar包中的spring配置文件

    7. **SpringDemo**:这可能是项目中的一个示例或演示,展示了如何加载和使用类路径下的Spring配置文件,以及如何集成其他库,如MyBatis。 综上所述,"加载jar包中的spring配置文件"是一个关键的Java开发实践,它...

Global site tag (gtag.js) - Google Analytics