package reflect; import java.io.IOException; import java.io.InputStream; import java.nio.ByteBuffer; import java.util.jar.JarEntry; import java.util.jar.JarFile; public class TestClassLoader extends ClassLoader { @Override protected Class<?> findClass(String name) throws ClassNotFoundException { InputStream in = null; try { String jarFilePath = "C:/XXXX/omu.jar"; //String classfile = "com/XXX/ABC.class"; JarFile jarFile = new JarFile(jarFilePath); JarEntry entry = jarFile.getJarEntry(name); if (entry == null) { return super.findClass(name); } in = jarFile.getInputStream(entry); int size = (int)entry.getSize(); byte[] b = new byte[size]; // ByteBuffer bytebuffer = ByteBuffer.allocate(size); int offset = 0; while(true) { int length = in.read(b,offset,size-offset); offset += length; if (offset>=size) { break; } } return defineClass(name, b, 0, size); } catch (IOException e) { //throw new ClassNotFoundException(name, e); return super.findClass(name); } finally { if (in != null) { try { in.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } public static void main(String[] args) throws ClassNotFoundException { TestClassLoader loader = new TestClassLoader(); Class<?> classDef = loader.loadClass("com.upgrade.UpgradeMain"); System.out.println(classDef); } }
Class classDefinition = Class.forName(className); Object object = classDefinition.newInstance(); Class[] args = new Class[]{int.class, int.class}; Method m = classDefinition.getMethod("setSize", args ); m.invoke(object, 5, 6); // 调用这个类的setSize(int , int ) 方法
相关推荐
让Java支持热加载是个不错的想法。如何做到的呢? 1. 定义好接口和实现类 2. 让代理类通过反射的方式调用实现类,对外暴露的是代理类。 3. 自定义URLClassLoader。检查实现类.class文件的...Java自定义classloader;
案1:修改序列化byte数据该法可解决序列化最终数据的serialVesionUID不致,但法解决Object的serialVesionUID不案2:反射修改s
自定义ClassLoader,控制台输入调试。 运行期间 重新载入指定目录的class文件。可实现对于类的功能函数更新。 用到java 反射,@interface 等技术
工程名为service_classloader,功能全部使用corejava实现,使用maven管理依赖,没有使用任何框架(junit除外)。 使用的技术主要包括:classlaoder,加密解密,线程,ThreadLocal使用,反射,IO操作,jdbc, 序列化,...
13. 自定义ClassLoader 13 14. double保留两位数的两个方案 18 16. 用户输入输出,文件输入输出范例(1) 19 17.以指定符号分割显示 22 17. 单例模式 22 18. 工厂模式 23 19. 读取配置文件(1) 25 20. 根据libName动态...
1.2 static 类<?> forName(String name, boolean initialize, ClassLoader loader) name:全限定路径名 initialize:表示是否初始化,默认是false loader:可以指定一个类加载器加载...
ClassLoaderTest 测试自定义的URLClassLoader以加载类 测试如何正确关闭类加载器。 测试如何使用反射关闭JarFile来修复资源泄漏。
DexClassLoader的parent设置为宿主程序的classloader,即可将主程序和插件程序的class贯通 2、插件apk的资源 通过构造插件apk的AssetManager和Resouce类即可。 本项目最关键一点功能、也是和网上其他插件项目...
浏览器独立的 JavaScript SDK... ClassLoader 延迟加载 JavaScript 类、核心 JavaScript 的扩展、反射 API、集合 API、单元测试 API、AJAX API、日志 API 和自定义/DOM 事件 API。 JavaScript 应该是什么,可以是什么。
15.2.2 建立classloader实例 518 15.3 重点复习 520 15.4 课后练习 521 chapter16 自定义泛型、枚举与标注 523 16.1 自定义泛型 524 16.1.1 定义泛型方法 524 16.1.2 使用extends与? 525 16.1.3 使用...
3.2.2 类装载器ClassLoader 3.2.3 Java反射机制 3.3 资源访问利器 3.3.1 资源抽象接口 3.3.2 资源加载 3.4 BeanFactory和ApplicationContext 3.4.1 BeanFactory介绍 3.4.2 ApplicationContext介绍 3.4.3 父子容器 ...
3.2.2 类装载器ClassLoader 3.2.3 Java反射机制 3.3 资源访问利器 3.3.1 资源抽象接口 3.3.2 资源加载 3.4 BeanFactory和ApplicationContext 3.4.1 BeanFactory介绍 3.4.2 ApplicationContext介绍 3.4.3 父子容器 ...
25 3:ServicorTo 和 ServicorFrom 互换................................................................................................................25 2.3.3.1. 2.4.1. 如何确定垃圾 ......................