- 浏览: 991120 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (223)
- JDBC技术 (29)
- Java Base (21)
- SSH框架的集合 (5)
- Javascript部分 (16)
- Sping2.5框架 (6)
- Hibernate框架 (19)
- JDBC中的数据库连接 (5)
- Ajax技术应用 (9)
- Java工具包下载 (3)
- Database (4)
- Java Web (13)
- 我的生活 (4)
- Struts2 (25)
- S2SH (1)
- Prototype (1)
- jfreeChart (5)
- JPA (7)
- JBPM (1)
- JasperReport (6)
- DWR (1)
- freeMark (2)
- IBatis (2)
- FCKeditor (2)
- POI (1)
- JQuery (6)
- JSON (1)
- JavaMail (3)
- Flex (2)
- CSS收藏夹 (1)
- 润乾报表 (2)
- 开源技术 (1)
- Android (2)
- Android_UI (1)
- Android_OS (6)
- Android_OpenLibs (3)
- Volley (1)
- JS_OpenLibs (1)
- Hessian (3)
- OS (1)
最新评论
-
damoluomu:
简单易懂
Java Web开发Session超时设置 -
di1984HIT:
学习了~~~~~~
Java Web开发Session超时设置 -
lord_is_layuping:
...
Java Web开发Session超时设置 -
15111285554:
...
Java Web开发Session超时设置 -
sfg1314:
暂停后重新下载就会报错:ClientAbortExceptio ...
Java Web 文件下载之断点续传
/** * Java 类加载器 * * @author 张明学 * */ public class ClassLoaderStudy { public static void main(String[] args) throws Exception { // 获取:加载ClassLoaderStudy的类加载器 System.out.println(ClassLoaderStudy.class.getClassLoader().getClass().getName());// AppClassLoader // 获取:加载ClassLoaderStudy所遍历的类加载器 ClassLoader classLoader = ClassLoaderStudy.class.getClassLoader(); while (null != classLoader) { System.out.println(classLoader.getClass().getName()); classLoader = classLoader.getParent(); } /** * Java 提供了三个类加载器 * BootStrap ------> getParent() == null;负责加载JRE/lib/rt.jar中的class * ExtClassLoader ------> getParent() == BootStrap; 负责加载JRE/lib/ext/*.jar中的class * AppClassLoader ------> getParent() == ExtClassLoader; 负责加载CLASSPATH指定的所有jar目录 * 每个一个加载器(除BootStrap外)包括自己定义的类加载器,加载一个class时首先交给它的父加载器,父加载器再交给它的父加载器 * 直到BootStrap类加载器,当父加载器没有找到时再交给它的子加载器,一层层的找,若都没有找到就报:java.lang.ClassNotFoundException * * 当需要加载一个类默认首选使用当前线程的类加载器去加载,若A类中引用了B类则B也是由该加载器去加载 */ // 用自己的类加载去加载自己加过密的class文件 // 必须要把原来目录中的(即:bin\com\mengya\classLoader\)下面的myClass删除,因为 // 加载myClass时MyClassLoader首先会交给父加载器,若父加载器在原目录中找到了myClass的class文件 // 那么就是父加载器去加载了,也就轮不到自己定义的MyClassLoader加载了。 Class clazz = new MyClassLoader().loadClass("com.mengya.classLoader.myClass"); // 因为自己编写的myClass是加过密的,故编译器不能正确编译myClass文件,即不能出现MyClass。 // 故让MyClass继承另一个类,用的时候让它的父类(接口等)去引用加过密的myClass实例 MyClassInter test = (MyClassInter) clazz.newInstance(); // MyClass myClass = null;编译器报错 System.out.println(test.toString()); } }
/** * 自定义的类加载器(继承ClassLoader重写findClass方法) * * @author 张明学 * */ public class MyClassLoader extends ClassLoader { @Override protected Class<?> findClass(String name) throws ClassNotFoundException { String destPath = "F:\\MyEclipseWorkspace\\JavaBase\\myClassLib"; String className = name.substring(name.lastIndexOf('.') + 1); String classFileName = destPath + "\\" + className + ".class"; InputStream fileInStream = null; ByteArrayOutputStream byteArrayOutStream = null; try { fileInStream = new FileInputStream(classFileName); byteArrayOutStream = new ByteArrayOutputStream(); encrypt(fileInStream, byteArrayOutStream); byte[] classByte = byteArrayOutStream.toByteArray(); return defineClass(classByte, 0, classByte.length); } catch (Exception e) { e.printStackTrace(); } finally { try { byteArrayOutStream.close(); fileInStream.close(); } catch (IOException e) { e.printStackTrace(); } } return super.findClass(name); } /** * 用来加密class文件 * * @param args */ public static void main(String[] args) { // 原class文件 String srcPath = "F:\\MyEclipseWorkspace\\JavaBase\\bin\\com\\mengya\\classLoader\\MyClass.class"; // 加密class文件存放目录 String destPath = "F:\\MyEclipseWorkspace\\JavaBase\\myClassLib"; InputStream fileInStream = null; OutputStream fileOutStream = null; try { fileInStream = new FileInputStream(srcPath); String fileName = srcPath.substring(srcPath.lastIndexOf('\\') + 1); String destFilePath = destPath + "\\" + fileName; fileOutStream = new FileOutputStream(destFilePath); encrypt(fileInStream, fileOutStream); } catch (Exception e) { e.printStackTrace(); } finally { try { fileOutStream.close(); fileInStream.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 对class文件加(解)密 * * @param inStream * class文件输入流 * @param outStream * class文件输出流 */ public static void encrypt(InputStream inStream, OutputStream outStream) throws Exception { int b = -1; while ((b = inStream.read()) != -1) { outStream.write(b ^ 0xff); } } }
/** * 自己定义的类加载加载的测试类 * * @author 张明学 * */ public class MyClass implements MyClassInter { @Override public String toString() { return "Hello !"; } }
public interface MyClassInter { }
发表评论
-
HttpURLConnection附件上传
2015-05-15 18:25 3416整合了一个自己写的采用Http做附件上传的工具,分享一下! ... -
java自带线程池和队列详细讲解
2014-11-29 16:39 8513Java线程池使用说明 一简介 线程的使用在java中占 ... -
使用CGLIB的代理技术
2010-06-09 19:04 1538import java.lang.reflect.Method ... -
使用反射和注解模拟Spring的依赖注入
2010-06-09 19:00 4511作为一个应用Java的反射和注解的一个使用。 首简写一个XM ... -
Java基础十:JDK 动态代理类分析(java.lang.reflect.Proxy使用)
2010-05-28 19:25 4139/** * JDK 动态代理类分析(java.lang.r ... -
Java基础八:泛型,?通配符
2010-05-28 19:17 6286/** * JDK1.5 泛型 * * @aut ... -
Java基础七:注解Annotation使用说明
2010-05-28 19:14 4022import java.lang.annotation.Ele ... -
Java基础六:apache的Beanutils简单使用对JavaBean操作的封装
2010-05-28 19:08 2186/** * apache的Beanutils简单使用 ... -
Java基础五:内省(对JavaBean的操作)
2010-05-28 19:05 2375/** * Person JavaBean * ... -
Java基础四: 反射(构造方法,成员变量,普通方法,数组)
2010-05-28 18:58 5779/** * 反射(构造方法,成员变量,普通方法,数组) ... -
Java基础三: 枚举高级应用(向枚举值对象中添加变量和方法)
2010-05-28 18:45 3858/** * JDK1.5 枚举高级应用(向枚举值对象中添加 ... -
Java基础二: hashCode的作用简要说明,可能导致对象在集合中无法删除
2010-05-28 18:30 1641import java.util.ArrayList; im ... -
Java基础一: 自动装箱,折箱、静态导入、可变参数
2010-05-28 18:24 1626自动装,折箱 /** * JDK1.5 自动装箱,折箱 ... -
apache StringUtils常见用法说明
2009-10-28 17:24 44371.空字符串检查使用函数: StringUtils.isBla ... -
产生随机字符串(a-z A-Z 0-9)
2009-09-25 17:47 3133实现方法一: public class RandomFile ... -
计算离当前日期之前或之后任意天的日期
2009-06-18 13:33 1503/** * 日期计算 * * @author z ... -
计算Java日期Date,DateFormat,GregorianCalendar的使用
2009-06-16 17:09 17966概要 不管你是处理财务交易还是计划着下一步的行动,你都要知 ... -
Java计算日期今天,昨天,上周,上月
2009-06-16 16:53 8438功能:今天,昨天,本周,上周,本月,上月 范围:以周一作为一 ... -
@SuppressWarnings(unchecked)作用解释.doc
2009-05-13 09:17 34641解释一: 屏蔽某些编译时的警告信息 ... -
JDK实现AOP动态代码
2009-04-20 14:29 62代理类: import java.lang.refle ...
相关推荐
总结起来,Java 类加载器加密是一种增强程序安全性的技术,通过自定义类加载器和解密逻辑,可以在加载类之前对其进行加密,提高代码的保护性。同时,结合反射机制,即使类是加密状态,也能正常执行程序。这种技术常...
Java的类加载机制遵循双亲委派模型,即当一个类加载器需要加载类时,它首先委托父类加载器尝试加载,只有当父类加载器无法加载时,才会尝试自己加载。这种设计避免了类的重复加载,并确保了核心类库的唯一性。 二、...
在`ClassLoader`的层次结构中,有三个基本的类加载器:Bootstrap ClassLoader、Extension ClassLoader和AppClassLoader。Bootstrap ClassLoader加载JRE的核心库,Extension ClassLoader加载Java扩展目录下的类,而...
在Java编程语言中,类加载器(ClassLoader)是运行时环境的一个重要组成部分,它负责将类的字节码从各种来源加载到Java虚拟机(JVM)中,从而使得程序可以执行。自定义类加载器允许开发人员根据特定需求定制加载类的...
Java加壳技术是一种保护Java程序不被轻易反编译或篡改的安全手段,它通过自定义类加载器来实现对原始字节码的包装。在Java中,类加载器是负责加载类到JVM(Java虚拟机)的核心组件。自定义类加载器允许开发者根据...
深入理解ClassLoader是深入理解Java动态加载机制、自定义类加载器以及对类的热部署等高级特性的重要基础。 在Java中,ClassLoader遵循的是委托模型(Delegation Model)。当一个类加载器接收到一个类加载请求时,它...
例如,自定义类加载器可以用于实现热部署、类隔离、加密加载等高级功能。 总的来说,ClassLoader是Java平台的核心组件之一,它的设计和实现对于理解JVM的工作原理至关重要。深入学习ClassLoader不仅可以提高编程...
除了这三种系统类加载器,还可以自定义类加载器,满足特定的加载需求,例如加载网络上的类或加密后的类文件。 类加载器的代理模式体现在父子加载器的关系上。当一个类加载器尝试加载类时,它会先委托给父类加载器,...
Java 类加载器(ClassLoader)是Java虚拟机(JVM)中的一个重要组成部分,它负责加载类的字节码文件,使得程序能够运行。深入理解ClassLoader对于优化应用性能、处理类加载问题以及实现自定义加载策略至关重要。 一...
例如,可以实现一个只加载指定目录下类的类加载器,或者实现一个能加载加密或压缩格式的类文件的类加载器。 此外,"classloader-playground"还可能包含对线程上下文类加载器(Thread Context ClassLoader)的理解和...
Java中的类加载器分为三个主要层次:启动类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ClassLoader)和系统类加载器(AppClassLoader)。启动类加载器负责加载JRE核心库,如`rt.jar`;扩展类加载器...
4. **自定义类加载器(User-defined ClassLoader)**:用户可以根据需要创建自己的类加载器,用于加载特定位置的类,例如从网络、数据库或者加密文件中加载类。 类加载的过程遵循“双亲委派模型”: 1. **加载...
在这个过程中,类加载器(ClassLoader)扮演着关键角色,它负责查找并加载Java类的字节码文件。本文将深入探讨Java类加载的原理、过程以及相关知识点。 首先,我们需要理解类加载的三个基本阶段:加载、验证、准备...
自定义类加载器允许开发者根据特定需求编写自己的加载逻辑,比如加密类文件防止反编译,或者从网络、数据库等非传统源加载类。类加载器之间形成了一种层次结构,称为**类加载器层次体系**,每个类加载器都有明确的...
例如,`classloader.dll`和`libclassloader.so`可能就是自定义的类加载器,它们可以在加载类时处理加密内容。 动态加密则是在程序运行时对类文件进行实时加密和解密。这种方法通常涉及自定义类加载器,它在加载类时...
Java中类加载器遵循双亲委派模型,即当一个类加载器收到加载类的请求时,首先将这个请求委派给父类加载器去完成,只有当父类加载器无法完成时才自己尝试加载。这种机制保证了Java平台的基础稳定性和安全性。 #### ...
在Java编程语言中,类加载器(ClassLoader)是至关重要的组成部分,它负责将类的字节码转换为可执行的Java对象。理解类加载器的工作原理对于深入掌握Java虚拟机(JVM)运行机制和进行高效的问题排查至关重要。在这个...
2. 类加载器分类:Java中的ClassLoader有三种基本类型:Bootstrap ClassLoader(引导类加载器)、Extension ClassLoader(扩展类加载器)和AppClassLoader(应用程序类加载器)。Bootstrap加载JDK核心库,Extension...
自定义ClassLoader是Java平台的一大特色,开发人员可以根据需要创建自己的类加载器,例如实现模块化、热部署或者加密解密类等高级功能。自定义ClassLoader通常需要重写findClass()或loadClass()方法,以控制类的加载...