- 浏览: 659285 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
HkEndless:
不好意思,请问这确定是回调机制吗。你的例子中只是将接口的实现类 ...
Spring CallBack回调机制介绍 -
hanmiao:
写的真乱啊,完全不知所云...
Java如何调用可执行文件和批处理命令 -
junia_1:
junia_1 写道 shock: ...
为什么要使用EJB -
junia_1:
shock:
为什么要使用EJB -
coollifer:
不错
SQL Server数据导入到Oracle中的方法
package demo; import java.io.*; public class MyClassLoader extends ClassLoader { private static final int BUFFER_SIZE = 8192; protected synchronized Class loadClass(String className, boolean resolve) throws ClassNotFoundException { log("Loading class: " + className + ", resolve: " + resolve); // 1. is this class already loaded? Class cls = findLoadedClass(className); if (cls != null) { return cls; } // 2. get class file name from class name String clsFile = className.replace('.', '/') + ".class"; // 3. get bytes for class byte[] classBytes = null; try { InputStream in = getResourceAsStream(clsFile); byte[] buffer = new byte[BUFFER_SIZE]; ByteArrayOutputStream out = new ByteArrayOutputStream(); int n = -1; while ((n = in.read(buffer, 0, BUFFER_SIZE)) != -1) { out.write(buffer, 0, n); } classBytes = out.toByteArray(); } catch (IOException e) { log("ERROR loading class file: " + e); } if (classBytes == null) { throw new ClassNotFoundException("Cannot load class: " + className); } // 4. turn the byte array into a Class try { cls = defineClass(className, classBytes, 0, classBytes.length); if (resolve) { resolveClass(cls); } } catch (SecurityException e) { // loading core java classes such as java.lang.String // is prohibited, throws java.lang.SecurityException. // delegate to parent if not allowed to load class cls = super.loadClass(className, resolve); } return cls; } private static void log(String s) { System.out.println(s); } }
Test code: package demo; public class TestClassLoader { public static void main(String[] args) throws Exception { MyClassLoader loader1 = new MyClassLoader(); // load demo.Base64 Class clsB64 = Class.forName("demo.Base64", true, loader1); System.out.println("Base64 class: " + clsB64); if (Base64.class.equals(clsB64)) { System.out.println("Base64 loaded through custom loader is the same as that loaded by System loader."); } else { System.out.println("Base64 loaded through custom loader is NOT same as that loaded by System loader."); } // call the main method in Base64 java.lang.reflect.Method main = clsB64.getMethod("main", new Class[] {String[].class}); main.invoke(null, new Object[]{ new String[]{} }); } }
发表评论
-
hibernate Restrictions用法 MatchMode.ANYWHERE
2012-07-14 15:50 3970方法 说明 Res ... -
URLClassLoader
2012-05-27 19:45 998This example shows how a serv ... -
Deal with big-endian and little-endian order
2011-12-25 19:17 1120Java virtual machine always use ... -
修改eclipse的背景色
2011-11-12 19:23 1114eclipse 操作界面默认颜色为白色。对于我们长期 ... -
多线程管道流输入输出模式
2011-11-07 07:23 1091import java.io.* ; class Send ... -
Java计数单字节双字节字符个数的例子
2011-10-26 14:29 1294/* 计数单双字符的个数并存储在Map对象中 ... -
常用内存数据库3
2011-10-24 00:24 15204.1.2 哪些场合适合使用其他的关系型数据库管 ... -
java字节码规则
2011-09-05 13:56 1253栈和局部变量操作 将常量压入栈的指令 aconst_nul ... -
Tomcat中限制ip访问
2011-08-23 21:40 1272Tomcat中限制ip访问是非常简单的,只需要编辑server ... -
一个Java程序员应该掌握的10项技能
2011-08-22 10:27 6211、语法:必须比较熟 ... -
2011 年 8 月 Java 开发人员新闻快讯
2011-08-18 18:59 837Java SE 7 发布了! 经过世界各地 Ja ... -
BlockingQueue
2011-08-13 09:59 718import java.util.concurrent.Arr ... -
eclipse中java项目转换为web项目
2011-07-27 18:29 898经常在eclipse中导入web项目时,出现转不了项目类型 ... -
Oracle官方Weblogic插件安装
2011-07-20 22:00 2881Installing Oracle Enterprise Pa ... -
Java集合HashSet-ArrayList-HashMap的线程同步控制方法和区别
2011-06-21 17:44 2321C ollections类中提供了多 ... -
关于java的集合类,以及HashMap中Set的用法
2011-06-21 17:35 1807import java.util.*; public c ... -
Java的动态代理实例
2011-06-16 03:44 1058首先写一个接口: package net.test.dyna ... -
Java如何调用可执行文件和批处理命令
2011-06-07 00:58 2351Java是种跨平台的语言,我们经常碰到需要通过Java调用wi ... -
jsp实现图片验证码的方法
2011-06-07 00:57 1393调用方法 <img src=&quo ... -
java中使用IO流进行文件操作
2011-06-07 00:56 1832Java中对文件的操作 java中提供了i ...
相关推荐
- **安全沙箱**:每个加载器都有自己的命名空间,可以通过自定义加载器限制代码访问权限。 - **插件系统**:插件有自己的类加载器,使得插件可以独立于主程序加载和卸载。 在编写`MyClassLoader`时,需要注意的是,...
在这个例子中,`MyClassLoader`首先尝试从自定义的位置加载类,如果失败,则将请求委派给父类加载器。 总之,自定义类加载器提供了一种灵活的方式来控制类的加载过程,满足特殊的应用场景,如动态加载、模块化系统...
"Java基于自定义类加载器实现热部署过程解析" Java中基于自定义类加载器实现热部署是指在不重启应用的情况下,当类的定义即字节码文件修改后,能够替换该Class创建的对象。热部署是Java中的一个重要概念,它可以...
上述代码展示了如何创建一个自定义类加载器`MyClassLoader`,该类继承自`java.lang.ClassLoader`。`MyClassLoader`的主要功能是从文件系统中加载指定类的二进制数据。 - **构造函数**:接受一个父类加载器和基础...
3. Application ClassLoader:也称为系统类加载器,负责加载用户类路径`-cp`或`-classpath`指定的所有类。 当一个类被加载时,如果它的父类加载器无法加载该类,那么会将任务委派给子类加载器。这就是著名的"委托...
自定义加载器需要重写`findClass()`或`loadClass()`方法。在`MyClassLoader2`示例中,它尝试从指定路径查找类的字节码文件,并通过`defineClass()`方法将字节码转换为Class对象。 ```java public Class<?> find...
在自定义类加载器示例中,我们创建了一个名为`MyClassLoader`的类,它继承了`ClassLoader`。在`loadClass()`方法中,实现了双亲委派机制,先尝试父加载器,然后是当前类加载器的`findClass()`方法。`findClass()`...
Java允许我们通过自定义类加载器或者使用内置的`ClassLoader`来实现这一功能。以下是一份详细的步骤和知识点解释: 1. **创建Java接口和实现**: - 首先,定义一个公共接口,例如`ActionInterface`,它包含一个...
首先,Java类加载器分为系统类加载器和自定义类加载器。系统类加载器包括引导类加载器、扩展类加载器和系统类加载器: 1. 引导类加载器(Bootstrap Class Loader):由JVM原生代码实现,负责加载JDK核心库,如rt....
以下是一个简化的自定义类加载器示例: ```java public class MyClassLoader extends ClassLoader { @Override protected Class<?> findClass(String className) throws ClassNotFoundException { // 实现自定义...
当我们需要加载类时,使用自定义类加载器而非系统类加载器,这样可以控制何时加载特定的类。 例如,我们可以创建一个名为`MyClassLoader`的类加载器,其加载类的方式如下: ```java public class MyClassLoader ...
本文详细介绍了 Java 类加载机制的基本概念,包括类加载的过程、初始化时机、类加载器的工作原理及其分类,并提供了一个自定义类加载器的示例。通过这些内容的学习,可以帮助开发者更好地理解 Java 类加载机制,为...
为了实现动态加载,我们需要一个管理插件的框架,它可以监听新插件的添加,使用自定义类加载器加载它们,并提供插件的生命周期管理。例如,我们可以创建一个PluginManager类,用于管理和加载插件: ```java public ...
下面是一个简单的用户自定义类加载器示例: ```java public class MyClassLoader extends ClassLoader { private String path; public MyClassLoader(String path) { this.path = path; } @Override ...
1. **继承自ClassLoader**:创建一个新的类加载器,如`MyClassLoader extends ClassLoader`。 2. **覆盖findClass方法**:这是类加载的关键部分,你需要在这里读取并加载新的字节码文件。例如,你可以使用`java.nio...
在Java编程中,类动态加载是一项重要的技术,它允许程序在运行时根据需要加载新的类,从而提高了灵活性和可...在实际应用中,我们需要注意类加载的性能影响,以及类加载器之间的隔离问题,以确保系统的稳定性和安全性。
`loadClass()` 方法通常用于委托父类加载器加载类,如果父类加载器无法加载,再由当前类加载器尝试加载。`findClass()` 方法则负责根据类名查找对应的二进制字节流,并转换为Class对象。 在描述中提到,该案例会...
此外,用户还可以自定义类加载器,如示例中的`MyClassLoader`,以便实现特殊的需求,如从非标准位置加载类。 在示例代码中,我们看到一个名为`Programmer`的类,它有一个`code()`方法。这个类被编译为`Programmer....
通过创建自定义的类加载器,可以在类文件加载前对其进行解密,确保只有授权的用户能够访问原始源代码。 3. **Java Cryptography Extension (JCE)**:为了实施加密/解密操作,开发者需要熟悉JCE提供的API,以便正确地...
这样,JVM会使用我们的自定义加载器来处理类文件,包括解密操作。Listing 1展示了如何使用自定义ClassLoader加载类文件的基本步骤。 ```java ClassLoader myClassLoader = new MyClassLoader(); Class<?> myClass =...