/**
* This is only one of the listed subjects to be finished in the near future.
* All that sounds important should be deeply understood though it is hard to spare time for it.
* That is why we call it Interface Oriented Blogging.
* @author Boki
* 未完成请勿参考!
*/
[Sketch]
1.系统默认的三个主要类加载器.每个类负责加载特定位置的类.
2.自定义加载器的时候必须继承一个类:ClassLoader
3.loadClass方法为父类方法(去找父类加载器)
4.findClass方法(自己的加载器的方法,只需要覆盖该方法)
5.defineClass(将得到的class文件转换成字节码)
package cn.itcast.day2;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class MyClassLoader extends ClassLoader{
/**
* @param args
*/
//加密部分
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();
}
private static void cypher(InputStream ips ,OutputStream ops) throws Exception{
int b = -1;
while((b=ips.read())!=-1){
ops.write(b ^ 0xff);
}
}
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) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public MyClassLoader(){
}
public MyClassLoader(String classDir){
this.classDir = classDir;
}
}
package cn.itcast.day2;
//做加密用的,对此进行加密处理
//加密处理后放的class入到itcastlib文件夹下
import java.util.Date;
public class ClassLoaderAttachment extends Date {
public String toString()
{
return "hello,itcast";
}
}