@version 1.0 2011.01.12
9,类加载器
→
→类加载器的委托机制
→自定义类加载器编写原理
扩展1: http://blog.youkuaiyun.com/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)分析