昨晚遇到一个特别无泪的问题,正如那句话:越诡异的问题越是简单,这里的简单是指问题原因……
目标是做一个对现有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 是Java标准库中的一个类加载器,它允许我们动态地从指定的URL位置加载类和资源。这个功能在开发插件系统、热部署或者处理多种版本库的场景中非常有用。从JDK 1.2开始,`java.net.URLClassLoader...
本篇文章将深入讲解如何使用URLClassLoader加载C盘下的test.jar文件。 首先,了解类加载器的基本概念。在Java中,类加载器是负责查找并加载类的机制。Java虚拟机(JVM)使用一系列的类加载器,包括Bootstrap ...
2. 编写Java代码,使用URLClassLoader加载这个jar包。你需要指定jar包的本地路径,创建一个新的URL对象,并使用URLClassLoader的`newInstance`方法来实例化一个新的类加载器。 3. 使用加载后的类加载器,动态地加载...
在Java编程语言中,`URLClassLoader`是Java标准类加载器的一种实现,它负责从指定的URL(统一资源定位符)加载类和资源。本文将深入探讨`URLClassLoader`的工作原理,以及如何处理指定目录和JAR文件中的类加载问题。...
这篇博客文章“URLClassLoader初体验”可能深入探讨了如何使用`URLClassLoader`来动态加载类和资源,以及它在实际开发中的应用。下面我们将详细探讨`URLClassLoader`的相关知识点。 首先,`URLClassLoader`是Java...
在Java编程语言中,动态加载类机制是一种强大的功能,它允许程序在运行时根据需要加载新的类或资源,而不是在编译时确定所有类。这种技术对于提高软件的灵活性、可扩展性和模块化至关重要,特别是在大型系统和插件式...
`URLClassLoader`是Java中的一个类加载器,它可以从指定的URL列表中加载类。在描述中提到的执行链,实际上是一个精心构造的Java反射调用序列,用于创建`URLClassLoader`实例,然后通过这个类加载器加载并执行自定义...
在Java编程中,动态编译和加载类是一种高级特性,它允许程序在运行时编译源代码并将其加载到Java虚拟机(JVM)中。这种能力对于开发灵活性高、可扩展性强的应用程序非常有用,比如在服务器端处理动态生成的代码、...
3. **加载类**:使用加载的类加载器,我们可以加载JAR中的类。例如,如果我们知道类名为`com.example.MyClass`,我们可以这样加载: ```java String className = "com.example.MyClass"; Class<?> clazz = ...
然而,双亲委派机制也可以被破坏,例如使用 URLClassLoader 加载类,这可以使得类加载器不遵守双亲委派机制的规则。 在 Java 中,了解类加载机制非常重要,因为它关系到 Java 程序的执行和安全性。理解类加载机制...
自定义类加载器(Custom ClassLoader)允许开发人员扩展加载类的行为,例如使用`URLClassLoader`从指定的URL加载类。类加载的层次结构(hierarchy)从引导类加载器开始,然后是扩展类加载器(ExtClassLoader),最后...
- 网络加载:使用`java.net.URLClassLoader`从网络指定的URL加载类。 - 压缩文件加载:从`.jar`、`.zip`等压缩文件中查找并加载类,自动解析`.jar`文件中的`.class`文件。 - 动态编译:从`.java`源代码文件编译成...
在Java编程中,类加载器(ClassLoader)是一个关键组件,负责加载类到JVM(Java虚拟机)中。`ClassLoaderTest`是一个特定的测试用例,专注于如何有效地管理和关闭类加载器,以防止资源泄漏,特别是针对加载了基础jar...
这意味着当一个类加载器收到加载类的请求时,它会先委托给其父类加载器尝试加载。只有当父类加载器无法找到并加载该类时,当前类加载器才会尝试自己加载。这种机制确保了Java核心类库的一致性,防止用户自定义类覆盖...
JAR文件可以通过`JarURLConnection`与URLClassLoader配合使用,实现从JAR中动态加载类。 9. **模块系统(Module System)**: Java 9引入了模块系统,它对类的加载和可见性进行了更细粒度的控制。在模块化环境中,动态...
2. 双亲委派模型:当一个类加载器接收到加载类的请求时,它首先会将任务委托给父类加载器,只有当父类加载器无法加载时,子类加载器才会尝试自己加载,这种机制避免了类的重复加载,并保证了核心库的稳定性。...
类加载器通过完全限定名(比如,com.mypak.module1.MyClass)来加载类,它使类可以动态加载类到jvm中,java并未规定类的位置,可以来自本地文件系统,也可以来自网络。 加载器分类 类加载器分为根加载器(bootstrap ...
- 自定义加载器通常用于隔离加载类、改变加载方式、扩展加载源、防止源码泄露等场景。 - 实现自定义类加载器时,建议在JDK1.2后重写findClass()方法而非loadClass(),以避免复杂的操作。 **常用方法**: - `...
Java类加载器是JVM的重要组成部分之一,它负责查找并加载类文件到JVM的内存空间中。Java程序的运行依赖于类加载器将`.class`文件加载到JVM中,并对其进行验证、准备和解析等步骤,最终使类能够在JVM中执行。 #### ...
7. **SpringDemo**:这可能是项目中的一个示例或演示,展示了如何加载和使用类路径下的Spring配置文件,以及如何集成其他库,如MyBatis。 综上所述,"加载jar包中的spring配置文件"是一个关键的Java开发实践,它...