- 浏览: 1587199 次
- 性别:
- 来自: 吉林
文章分类
- 全部博客 (624)
- C/C++ (33)
- Java (181)
- 网络相关 (7)
- 我爱篮球 (3)
- 也爱足球 (4)
- 杂谈 (1)
- 系统架构 (3)
- Web Service (14)
- Framework (3)
- 系统命令 (8)
- 管理平台相关 (8)
- 其它 (35)
- Websphere (1)
- Struts2 (24)
- Hibernate (16)
- Spring (23)
- javascript (20)
- jquery (23)
- html/css/div (28)
- 数据库 (40)
- JavaWeb (27)
- 设计模式 (2)
- 文档编写 (3)
- SVN (5)
- Ant (1)
- Maven (13)
- 软件项目管理 (8)
- AOP (1)
- kindeditor (1)
- JSON (2)
- Servlt/JSP (4)
- WordXML (2)
- XML (12)
- 面试相关 (7)
- Tomcat (11)
- 性能与调优 (29)
- 职业发展 (2)
- 操作系统 (7)
- AJAX (2)
- DWR (1)
- Eclipse (12)
- 持续集成 (3)
- 批处理命令 (1)
- Mozilla Rhino (2)
- 新鲜技术 (18)
- Apache mina (2)
- 底层技术 (18)
- Linux (22)
- 新鲜技术,IT历史 (1)
- 敏捷开发 (1)
- 版本控制 (5)
- 较火技术 (7)
- 集群 (2)
- Web前端 (13)
- 报表工具 (3)
- 网站架构 (5)
- 大数据 (8)
- 分布式存储 (5)
- 云计算 (8)
- TCP/IP协议 (1)
- 负载均衡 (3)
- 硬件 (1)
- 表现层技术 (3)
- Velocity (3)
- jvm (6)
- 并发编程 (10)
- hadoop (8)
- 数据结构和算法 (12)
- 计算机原理 (1)
- 测试驱动开发-TDD (3)
- 开发技巧 (1)
- 分词器 (1)
- 项目构建工具 (2)
- JMX (4)
- RMI (1)
- 测试技术 (22)
- 网络完全 (1)
- Git (4)
- apache开源包 (4)
- Java常用 (1)
- mock (2)
- OSGi (2)
- MongoDB (1)
- JBPM (1)
- Storm (3)
- mysql (2)
- telnet (1)
- 正则表达式 (1)
- bootstrap (4)
- Apache ActiveMQ (1)
- redis (9)
- Nginx (2)
- rsync+inotify文件同步 (2)
- testng (1)
- 原型设计工具 (1)
- 工程能力 (1)
- 风险控制 (3)
- ibatis (1)
- 分布式 (4)
- 安全技术 (1)
- 计算机基础 (4)
- 消息中间件 (1)
- UML (2)
最新评论
-
u012236967:
java命令执行jar包(里面的main函数)的方式(包括依赖其它的jar包问题) -
世界尽头没有你:
Selenium自动化测试从入门到精通(Java版)百度网盘地 ...
自动化测试工具 Selenium WebDriver 入门教程(针对主流浏览器) -
小小西芹菜:
我喜欢代码简洁易读,服务稳定的推送服务,前段时间研究了一下go ...
dwr实现Reverse Ajax推送技术的三种方式 -
hellozhouqiao:
楼主,请教一点问题.现在我们需要在excel 的页脚里面加上图 ...
FreeMaker + xml 导出word(处理目录,图片和页眉页脚问题) -
乱在长安:
使用Timer会有各种各样的问题好嘛?!书上推荐使用Sched ...
DelayQueue (ScheduledThreadPoolExecutor调度的实现)
之前客户要求在不重启应用的前提下实现动态增加服务及交易,在网上查了很长时间也没发现类似的技术,最后研究了一下ClassLoader。因为项目是与Spring,一开始我和同事尝试替换源码的class文件,然后调用Spring的refresh()函数刷新上下文,但是发现原来的类没有被新的类替换。于是我看了一下ClassLoader相关的内容,发现默认的系统类加载器加载类后就不会再次加载。然后我想到要定义自己的类加载器,最后可以实现动态替换原来的类了。虽然最后没能应用在项目中,但是初步了解了一下ClassLoader原理让我感觉挺兴奋的,打算以后再做一下深入的研究,先把源码拷贝下来。
class NetClassLoader extends ClassLoader{ private byte[] bb = null; //private String className = null; public NetClassLoader(){ //super(); super(ClassLoader.getSystemClassLoader().getParent());//让定义的类加载器与默认的系统类加载器平级 } public Class<?> loadClass(String name) throws ClassNotFoundException { return loadClass(name, false); } // public Class<?> getLoadedClass(String className)throws ClassNotFoundException{ // Class c = null; // // FileInputStream fis; // try { // // fis = new FileInputStream("bin\\"+className+".class"); // int length = 0; // length = fis.available(); // bb = new byte[length]; // fis.read(bb); // fis.close(); // } catch (FileNotFoundException e) { // throw new ClassNotFoundException("所要加载的类的字节码文件不存在"); // } catch (IOException e) { // throw new RuntimeException("加载字节码文件时出错"); // } // // c = findClass(className); // return c; // } protected synchronized Class<?> loadClass(String className, boolean resolve) throws ClassNotFoundException { Class c = findLoadedClass(className); FileInputStream fis = null; if(c == null){ try{ c = super.loadClass(className, resolve); }catch(ClassNotFoundException e){ try { fis = new FileInputStream("bin\\"+className+".class"); int length = 0; length = fis.available(); bb = new byte[length]; fis.read(bb); fis.close(); } catch (FileNotFoundException fe) { throw new ClassNotFoundException("所要加载的类的字节码文件不存在"); } catch (IOException ie) { throw new RuntimeException("加载字节码文件时出错"); } c = defineClass(className,bb,0,bb.length);//createClass(className); } } if (resolve) { resolveClass(c); } return c; } // public NetClassLoader(byte[] b){ // bb = b; // } public Class createClass(String className){ Class klass = defineClass(className,bb,0,bb.length); if(klass == null) System.out.println("是空的"); return klass; } } |
发表评论
-
Java SE7新特性之二进制字面量
2016-12-14 22:53 825Java SE 7中, 整数类型(byte, shor ... -
浮点数为什么不精确?为什么银行的金额不能用浮点数计算
2016-12-14 22:52 2013浮点数为什么不精确? 其实这句话本身就不精确, 相对精确一 ... -
计算机是如何计算乘法除法的(实际上都是转换为二进制加法计算)
2016-12-14 22:46 6627http://blog.csdn.net/blues1021 ... -
什么是补码、反码、负数在计算中如何表示
2016-12-14 22:39 920负数在计算机中如何表 ... -
Math.abs()绝对值取到的数不一定是正数
2016-12-14 22:37 1262Math.abs() 注释:Note that if th ... -
用BigInteger实现大素数生成算法
2016-12-06 16:42 1863转自:http://www.cnblogs.co ... -
加密(AES)、公私钥(PKI)、摘要(DIGEST)、签名(SIGNATURE)、证书(CERT)的形象解释和组合用法
2016-09-15 18:19 94071.鲍勃有两把钥匙,一把是公钥,另一把是私钥。 ... -
RSA加密公私钥生成工具(openssl)
2016-09-15 13:00 1186https://www.openssl.org/source/ ... -
RPC原理详解
2016-06-23 20:47 577RPC 功能目标 RPC 的主要功能目标是让构建分布式计算 ... -
Java并发之CountDownLatch、CyclicBarrier和Semaphore
2016-06-23 20:36 1408这次说一下 JUC 中的同步器三个主要的成员:CountDo ... -
线程间协作的两种方式:wait、notify、notifyAll和Condition
2016-06-23 20:35 575在前面我们将了很多关于同步的问题,然而在现实中,需要线程之 ... -
The final local variable xxx cannot be assigned, since it is defined in an enclo
2016-04-24 17:42 1592本文就自己编程时候遇到的一个问题,简要描述一下,并提出解决 ... -
一个奇葩的excel中无法trim的“空格”的问题
2016-03-29 16:21 1925太奇怪了。打印出来的命名是空格,就是 trim() 不管用。 ... -
List深度复制
2016-02-17 09:34 2677昨天弄了一个类似List<Map<String, ... -
Eclipse导入 jar 源码乱码问题
2015-12-15 19:43 871http://blog.csdn.net/laiwenqian ... -
Java高并发编程的各种陷阱
2015-07-25 17:49 1000www.iteye.com/blogs/subjects/ja ... -
ASM介绍(java字节码操作利器)
2015-06-10 20:46 4358转自:http://www.ibm.com/de ... -
JDK 7 中的 Fork/Join 模式(并发处理)
2015-06-03 19:47 1001转自:http://www.ibm.com/dev ... -
Java常见内存溢出异常分析
2015-06-03 16:36 827转自:http://www.iteye.com/news/3 ... -
dom4j解析带有命名空间的xml
2015-04-09 21:23 5527Element rootEle = resultDoc.g ...
相关推荐
然而,为了实现动态加载,我们需要创建自己的类加载器,例如在描述中提到的`CSClassLoaderUtil`。 `CSClassLoaderUtil`可能是一个实现了`java.lang.ClassLoader`接口的类,它重写了`loadClass()`方法。这个方法通常...
- 实现自定义类加载器时,建议在JDK1.2后重写findClass()方法而非loadClass(),以避免复杂的操作。 **常用方法**: - `getParent()`:返回当前类加载器的父类加载器。 - `forName(String className)`:根据类名动态...
在Java虚拟机(JVM)中,类加载器(ClassLoader)是至关重要的组成部分,它负责查找和加载类...在编写自己的ClassLoader时,需要考虑如何正确实现加载逻辑,以及如何处理类加载的并发问题,确保应用的稳定性和安全性。
这篇文章将深入探讨Android中的类加载器如何实现动态加载其他工程类的过程。 首先,我们需要了解类加载器的基本概念。在Java中,类加载器负责把字节码文件(.class文件)转换为运行时的Class对象。这个过程包括加载...
在Java编程语言中,动态加载jar文件是一种关键的特性,它允许程序在运行时加载新的类库或组件,而不是在编译时静态地链接。这种技术对于实现插件式开发或者模块化系统至关重要,因为它提供了灵活性和可扩展性。下面...
例如,可以创建自定义类加载器来实现按需加载、隔离不同版本的库,或者实现动态加载插件机制。通过重写`loadClass()`方法,开发者可以控制类的加载过程,实现特定的加载策略。 **多平台选择性配置**: Java的一个...
类加载器在Java开发中扮演着极其重要的角色,尤其是在需要实现动态加载类的应用场景下更是不可或缺。 总之,理解和掌握Java类加载器的相关知识对于提高程序设计能力具有重要意义。希望本文能帮助读者更好地理解和...
当这些默认ClassLoader无法满足需求,如加载运行时动态添加的jar包,我们就需要编写自定义ClassLoader。 自定义ClassLoader通常继承自java.lang.ClassLoader基类,并重写其关键方法,如`findClass(String name)`或`...
Java语言的动态加载方式和实现插件化的方法是本文的主要研究对象。所谓动态加载,就是在程序运行时加载类或资源,而不是在编译时。Java语言提供了多种动态加载方式,包括隐式加载和显式加载。隐式加载是通过new的...
loadClass 方法是加载类的核心方法,该方法首先检查该 name 指定的 class 是否有被加载,如果没有加载,则委托它的双亲 ClassLoader 进行加载,只有当双亲 ClassLoader 无法加载成功后,才会由自己加载。 在 Java ...
在Java编程语言中,动态类加载机制是一种强大...通过自定义类加载器和利用反射API,我们可以实现更高级的功能,比如动态加载和执行类,或者在运行时修改对象的行为。这使得Java成为一个高度适应性和可扩展的编程语言。
4. 用户自定义类加载器:开发者可以根据需求实现自己的类加载器,例如模块化系统中的模块类加载器。 类加载器之间的关系遵循“双亲委派模型”:当一个类加载器收到加载类的请求时,它首先会委托父类加载器去尝试...
1. Bootstrap ClassLoader(启动类加载器):这是最顶层的类加载器,由C++编写,是JVM自身的一部分。它负责加载存放在JAVA_HOME/lib目录或-Xbootclasspath参数指定路径下的类库。这个类加载器不是Java类,因此不能...
自定义ClassLoader在Android开发中并不常见,但有时为了实现动态加载或者热修复等功能,开发者可能需要创建自己的ClassLoader。自定义ClassLoader时,需要重写`loadClass()`、`findClass()`等方法。例如,`loadClass...
在Java 1.2及后续版本中,ClassLoader系统进行了改进,引入了双亲委派模型,即新的类加载请求首先会委托给父ClassLoader尝试加载,只有在父ClassLoader无法加载时,才会尝试自己加载。这样做提高了安全性,避免了类...
- **自定义类加载器(User-defined ClassLoader)**:用户可以根据需求编写自己的类加载器,实现特定的加载逻辑。 3. **双亲委派模型** 类加载器之间存在层次结构,当一个类加载器接收到加载类的请求时,它会先...
在Android开发中,动态加载JAR文件是一种常见的技术,它允许程序在运行时加载和执行新的功能或服务,而无需重新编译和安装整个应用程序。...通过上述方法,你可以实现自己的动态加载JAR功能,为应用增添更多可能性。