- 浏览: 219548 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
zzhyq:
有没有后台是ASHX 的呀
Ext.tree.TreePanel -
693593336:
谢谢作者分享,正好用上
Ext.tree.TreePanel -
greatwqs:
提供一个下载的demo不是更好
基于servlet的 Freemarker Demo
下午在看《Java 深度历险》,对Class & ClassLoader的定位不是很clear,于是不小心搜到如下一篇blog:
http://www.cnblogs.com/pony/archive/2008/10/10/1307921.html
blog_name : Java动态加载类 把代码稍作修改,就能跑起来了。ok,now show code:
共4个class--
package com.mark.core.test; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.net.URLConnection; import java.util.Hashtable; public class MyClassLoader extends ClassLoader { // 定义哈希表(Hashtable)类型的变量,用于保存被载入的类数据。 Hashtable loadedClasses; public MyClassLoader() { loadedClasses = new Hashtable(); } @Override public synchronized Class loadClass(String className, boolean resolve) throws ClassNotFoundException { Class newClass; byte[] classData; // 检查要载入的类数据是否已经被保存在哈希表中。 newClass = (Class) loadedClasses.get(className); // 如果类数据已经存在且resolve值为true,则解析它。 if (newClass != null) { if (resolve) { resolveClass(newClass); } return newClass; } /* * 首 先 试 图 从 本 地 系 统 类 组 中 载 入 指 定 类。 这 是 必 须 的, 因 为 虚 拟 机 将 这 个 类 载 入 后, 在 解 析 和 执 行 它 时 所 用 到 的 任 何 其 他 类, * 如java.lang.System 类 等, 均 不 再 使 用 虚 拟 机 的 类 载 入 器, 而 是 调 用 我 们 自 制 的 类 载 入 器 来 加 载。 */ try { newClass = findSystemClass(className); return newClass; } catch (ClassNotFoundException e) { System.out.println(className + " is not a system class!"); } // 如果不是系统类,则试图从网络中指定的URL地址载入类。 try { // 用自定义方法载入类数据,存放于字节数组classData中。 classData = getClassData(className); // 由字节数组所包含的数据建立一个class类型的对象。 // newClass = defineClass(classData, 0, classData.length); newClass = defineClass(null, classData, 0, classData.length); if (newClass == null) { throw new ClassNotFoundException(className); } } catch (Exception e) { throw new ClassNotFoundException(className); } // 如果类被正确载入,则将类数据保存在哈希表中,以备再次使用。 loadedClasses.put(className, newClass); // 如果resolve值为true,则解析类数据。 if (resolve) { resolveClass(newClass); } return newClass; } // 这个方法从网络中载入类数据。 protected byte[] getClassData(String className) throws IOException { byte[] data; int length; try { // 从网络中采用URL类的方法载入指定URL地址的类的数据。 URL url = new URL(className.endsWith(".class") ? className : className + ".class"); URLConnection connection = url.openConnection(); InputStream inputStream = connection.getInputStream(); length = connection.getContentLength(); data = new byte[length]; inputStream.read(data); inputStream.close(); return data; } catch (Exception e) { System.out.println("================start:"); e.printStackTrace(); System.out.println("================end:"); throw new IOException(className); } } }
interface:
package com.mark.core.test; public interface Share { public void start(String[] option); }
client test class:
package com.mark.core.test; public class TestClassLoader { public static void main(String[] args) { MyClassLoader ll = new MyClassLoader(); Class cc; Object oo; String ss = "http://localhost:8080/webdemo2/classes/RemoteClass.class"; if (args.length != 0) { ss = args[0]; } try { System.out.println("Loading class " + ss + "..."); // 使用重写的方法loadClass()载入类数据。 cc = ll.loadClass(ss); System.out.println("Creat instance..."); // 创建Object类型的类实例。 oo = cc.newInstance(); System.out.println("Call start() method..."); // 强制类型转换并执行被载入类中的方法。 ((Share) oo).start(args); } catch (Exception e) { System.out.println("Caught exception : " + e); e.printStackTrace(); } } }
the file below should be deploy in server after compiler it.
package com.mark.core.test; public class RemoteClass implements Share { /* (non-Javadoc) * @see com.mark.core.test.Share#start(java.lang.String[]) */ @Override public void start(String[] option) { System.out.println("congratulations!"); } }
how to?
step 1: build a java application project [A]. add the code above.
step 2: build a java_server project [B] that it can run on tomcat or other servers.
step 3: in java_server project : then you can copy RemoteClass.class from project A to project B And don't forget to delete the RemoteClass.java in Project A.
step 4:
update code.
String ss = "http://localhost:8080/webdemo2/classes/RemoteClass.class";
发表评论
-
Singletons and lazy loading
2011-09-26 19:47 919The Java Memory Model # ... -
JVM blogs
2011-09-14 21:40 473话说是 【JVM详解的专题】,很多文章的差不多的,有的详 ... -
effective Java _Generic
2011-09-12 12:03 0#23 -
Class Loader
2011-08-28 16:47 784专栏合集(一):Java深度历险 pdf已上传1 ... -
Study Linkinginginginginginginging
2011-08-27 10:42 738#1 java 工程和类等路径汇总 #2 让Apac ... -
How to send Email
2011-08-26 15:32 6051.java mail 使用介绍 2.Java ... -
Java_Try_Finally
2011-07-18 11:51 650public class TestTryCatch { ... -
关键字 final & transient
2011-06-08 16:49 969final 详见: http://java.chinaitl ... -
课程设计3
2010-01-04 14:09 781题目3:动态分区式存储管理的存储分配和回收 一、设计目的 ... -
课程设计1
2010-01-04 14:24 751采用的是C++语言编写的,但PCB的数据结构是符合要求的。 ... -
os课程设计后感
2010-01-04 14:48 543今天终于把操作系统的实验给终结了。基本要求算是符合了,可能表 ... -
java作业01
2010-03-06 16:02 665package homework01; public cla ... -
Java作业02
2010-03-11 14:22 794package homework02; import jav ... -
File函数返回当前路径
2010-03-12 19:37 673package netWorkMoreThreadCopy; ... -
多线程文件复制(界面)1
2010-03-12 23:45 943package netWorkMoreThreadCopy; ... -
Java IO 转摘
2010-03-15 00:26 514java中的io中的(input/output)str ... -
java作业03
2010-03-17 00:59 699package homework03; import jav ... -
Java作业
2010-03-17 01:19 642package homework03;import java. ... -
java作業3
2010-03-18 18:36 593package homework03;/** 首先编写一个抽象 ... -
java作业04(第六章 字符串和正则表达式)
2010-03-20 00:01 1084有点无聊就先把第六章的两道贼简单的题目给做了。 packa ...
相关推荐
破解java加密的ClassLoader.java,在classloader植入破解代码
让Java支持热加载是个不错的想法。如何做到的呢? 1. 定义好接口和实现类 2. 让代理类通过反射的方式调用实现类,对外暴露的是代理类。 3. 自定义URLClassLoader。检查实现类.class文件的...Java自定义classloader;
Java中的类加载器(ClassLoader)是Java虚拟机(JVM)的一个重要组成部分,它负责将类的.class文件从文件系统或者网络中加载到内存中,并转换为对应的Class对象。类加载器的工作流程主要包括加载、验证、准备、解析...
在 Java 语言中,类加载器(ClassLoader)是 Java 运行时环境的核心组成部分之一,它负责将编译后的 `.class` 文件加载到 JVM 中执行。从 JDK 1.0 开始,随着 Java Applet 的出现以及网络应用的需求增加,类加载机制...
在Java编程语言中,ClassLoader是一个至关重要的组成部分,它负责加载类到JVM(Java虚拟机)中。理解ClassLoader的工作原理以及如何定制它,对于深入学习Java的运行机制和进行高级应用开发具有重要意义。本篇文章将...
类加载器(`ClassLoader`)负责将编译后的`.class`文件加载到Java虚拟机(JVM)中执行,而类路径(`ClassPath`)则是指明了这些`.class`文件的位置。本文主要围绕Java类加载器和类路径展开讨论,以加深对Java运行时...
Java ClassLoader是一个核心的Java运行时组件,负责加载类到Java虚拟机(JVM)中。它是Java平台的独特特性,因为它允许动态加载类,增强了软件的可扩展性和灵活性。这篇博文(虽然链接不可用)可能深入探讨了...
自定义ClassLoader是Java灵活性的一个体现,开发者可以通过继承ClassLoader类并重写findClass()方法来自定义类的加载方式,例如从网络、数据库或者特定目录加载类。 接下来,我们讨论类变量初始化的顺序。Java中,...
在Java中,ClassLoader是一个系统组件,它根据指定的全限定类名(包括包名和类名)找到对应的.class文件,并将其转换为运行时的Class对象。Java的类加载机制遵循“双亲委派模型”,这意味着当一个类加载器需要加载类...
Java 中的 ClassLoader 是一个非常重要的组件,它负责动态加载 class 文件到虚拟机当中,并将其转换成 java.lang.Class 类的一个实例。每个这样的实例用来表示一个 Java 类,因此我们可以根据 Class 的实例可以得到...
自定义ClassLoader需要继承`java.lang.ClassLoader`类,并重写`findClass()`或`loadClass()`方法。通过这两个方法,你可以控制类的加载来源和方式。 在实际开发中,理解ClassLoader机制可以帮助解决一些问题,例如...
本工具是对java class文件进行加密保护的工具!本工具全面支持linux/unix/windows操作系统。 众所周知,java编译后的class文件是一种中间字节字文件, 很容易被反编译工具反编译,而传统的java源代码保护方法基本都是...
ClassLoader 是 Java 中的一个抽象类,它的主要作用是加载 Class 文件到 JVM 中。ClassLoader 使用了双亲委托模式进行类加载,每一个自定义的 ClassLoader 都必须继承 ClassLoader 这个抽象类,而每个 ClassLoader ...
Java ClassLoader机制是Java虚拟机(JVM)中一个至关重要的组成部分,它的主要任务是将类的.class文件加载到JVM中,使得程序能够运行。ClassLoader不仅负责类的加载,还涉及类的验证、初始化等一系列过程。理解...
### Java ClassLoader原理详解 #### 摘要 本文探讨了Java虚拟机(JVM)中的一个重要特性:动态类加载(Dynamic Class Loading)。这一机制为Java平台提供了强大的能力,允许在运行时安装软件组件,例如从网络下载...
本工具是对java class文件进行加密保护防止反编译的工具!本工具全面支持linux/unix/windows操作系统。 继推出v1.0版本后,获得了用户大量的支持与的反馈,我们再次推出本v2.0版,对加密算法进行了更大的改进,安全...
### Java ClassLoader理解详解 #### 一、引言 在商业流行的编程语言中,Java以其独特的运行机制脱颖而出:它在Java虚拟机(JVM)上运行。这意味着编译后的程序采用一种特殊的、与平台无关的格式,而不是针对特定...