@version 1.0 2011.01.12
9,类加载器
→
→类加载器的委托机制
→自定义类加载器编写原理
扩展1: http://blog.csdn.net/miyao16/archive/2009/11/30/4909374.aspx
扩展2: http://www.iteye.com/topic/136427
→class文件转换为字节码 defineClass()
→class文件加密
----------------------------------
//自定义加密算法
private static void cypher(InputStream ips ,OutputStream ops) throws Exception{
int b = -1;
while((b=ips.read())!=-1){
ops.write(b ^ 0xff);
}
}
//自定义类加载器 加载加密后的class文件(解密)
public MyClassLoader(){
}
public MyClassLoader(String classDir){
this.classDir = classDir;
}
private String classDir;
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
// TODO Auto-generated method stub
String classFileName = classDir + "\\" +
name.substring(name.lastIndexOf('.')+1) + ".class";
try {
FileInputStream fis = new FileInputStream(classFileName);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
cypher(fis,bos);
fis.close();
System.out.println("aaa");
byte[] bytes = bos.toByteArray();
return defineClass(bytes, 0, bytes.length);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
//测试用例
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
String srcPath = args[0];
String destDir = args[1];
FileInputStream fis = new FileInputStream(srcPath);
String destFileName = srcPath.substring( srcPath.lastIndexOf('\\')+1);
String destPath = destDir + "\\" + destFileName;
FileOutputStream fos = new FileOutputStream(destPath);
cypher(fis,fos);
fis.close();
fos.close();
}
10,动态类
→动态代理类设计原理与方法
→可配置AOP框架(spring)分析
分享到:
相关推荐
- **动态语言支持**:例如使用`java.lang.reflect.Proxy`类来创建动态代理类。 - **自定义代码生成**:通过编写代码来手动生成代理类的字节码。 ##### 2.2 动态代理的概念 动态代理允许我们为一个接口创建一个代理...
类加载器的知识不仅仅局限于基础概念,还包括类加载的时机(静态加载、动态加载)、类加载器的实现(如自定义类加载器)、类的卸载、以及类加载器与安全策略的关系等。深入理解和掌握这些知识点,对于开发高效、安全...
【深入探讨 Java 类加载器】 ...总之,Java类加载器是Java平台灵活性和动态性的关键部分,它的理解对于深入掌握Java技术体系非常重要。无论是解决运行时问题还是设计复杂的系统架构,都需要对类加载器有深刻的认识。
虽然Java提供了默认的类加载器,但在某些情况下可能需要自定义类加载器来满足特定的需求,如实现热部署、动态代理等功能。自定义类加载器需要继承`java.lang.ClassLoader`类,并重写`findClass`方法来实现自定义加载...
- `Proxy`类是Java提供的动态代理的工厂,它可以根据一个接口生成实现了该接口的代理类的对象。这个代理类会动态地生成并实现接口的所有方法。 - `InvocationHandler`接口定义了一个处理方法调用的回调方法`invoke...
这个方法需要三个参数:代理类的类加载器、代理类需要实现的接口列表以及我们的`InvocationHandler`实例: ```java MyService realService = new RealService(); // 实现MyService接口的类 MyInvocationHandler ...
3. **URLClassLoader**: 这是Java标准库中的一个类加载器,它可以从指定的URL加载类。通过创建`URLClassLoader`实例并传入包含源码或编译后类的目录或JAR文件的URL,可以在运行时加载新编译的类。 4. **反射...
在Java中,类加载器和类加载机制是非常重要的概念,它们使得Java具备了动态加载和热部署的能力,极大地提高了程序的灵活性。类加载器负责将.class文件加载到Java虚拟机中,并生成对应的java.lang.Class对象,以便JVM...
Java的设计允许开发者创建自己的类加载器,实现如代码加密、热部署、从网络加载类等高级功能。 类加载机制遵循两个核心原则: 1. **委托代理加载机制**:当一个类加载器收到加载类的请求时,它首先将请求委托给其...
- 创建代理对象需要三个参数:类加载器、目标接口数组和InvocationHandler实例。 二、CGLIB代理 CGLIB(Code Generation Library)是另一个常用的Java代理库,它不需要目标类实现任何接口,而是通过继承的方式创建...
Java动态代理基于Java反射机制,可以在运行时动态地创建代理类和代理对象。与静态代理(即手动编写代理类)相比,动态代理无需预先为每个接口编写单独的代理类,使得代码更加灵活且易于维护。 2. **代理接口** 在...
- `ClassLoader loader`: 定义代理类的类加载器。 - `Class[] interfaces`: 代理类要实现的接口列表。 - `InvocationHandler h`: 指派方法调用的调用处理程序。 **4. 示例代码** 为了更好地理解Java动态代理的...
Java 动态代理是Java平台提供的一种强大的工具,它允许我们在运行时动态生成代理类,这些代理类可以实现一组指定的接口,同时还能在方法调用前后添加自定义的行为。这种机制大大简化了面向切面编程(AOP)和事件监听...
- **应用程序类加载器 (Application ClassLoader):** 也称为系统类加载器,负责加载当前应用 classpath 下的所有类。这是开发者可以直接操作的类加载器。 #### 四、类加载过程 类加载过程主要包括三个阶段: 1. *...
本文将详细解析Java类加载原理,分为三篇文章进行阐述,分别是:Java类加载原理解析、插件环境下类加载原理解析和线程上下文类加载器。 首先,我们来了解Java虚拟机(JVM)的类加载器结构。JVM预定义了三种主要的类...
反射机制的核心在于Java提供的`java.lang.reflect`包,其中包括了`Class`、`Field`、`Method`、`Constructor`和`Array`等类,它们分别用于表示类、字段、方法、构造器和数组的相关信息。 1. **Class类**:每个类在...
`Proxy.newProxyInstance()`方法则用于创建代理对象,它需要`ClassLoader`(加载代理类的类加载器)、`Class[] interfaces`(代理类需要实现的接口数组)和`InvocationHandler`实例作为参数。 示例代码中的`...
- 除了Java标准库提供的动态代理,还可以使用第三方库如CGLIB、ASM等,它们可以通过字节码操作来生成非接口类型的代理类,提供了更灵活的代理机制。 以上就是Java动态代理的基本知识及其在实际应用中的体现。希望...
Java动态代理是Java语言提供的一种在运行时创建代理对象的技术,它允许我们为已存在的接口创建代理类,以便在调用真实目标对象的方法时添加额外的功能或行为。在这个实例中,我们将深入探讨Java动态代理的核心概念,...
然后,我们使用`Proxy.newProxyInstance`方法创建代理对象,传入目标对象的类加载器、目标对象实现的接口列表以及我们实现的InvocationHandler。 ```java Class[] interfaces = target.getClass().getInterfaces();...