java JVM-自定义类加载器从零到有
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java JVM-自定义类加载器从零到有,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1749字,纯文字阅读大概需要3分钟。
内容图文
![java JVM-自定义类加载器从零到有](/upload/InfoBanner/zyjiaocheng/713/e7510a1de315468cb4197beae075f456.jpg)
自定义文件系统类加载器
public class Loader extends ClassLoader{
private String dir;
public Loader(String dir)
{
this.dir=dir;
}
@Override
protected Class<?> findClass(String name)throws ClassNotFoundException
{
Class<?> c=findLoadedClass(name);
if(null!=c)
{
return c;
}else
{
ClassLoader parent=this.getParent();
try {
c=parent.loadClass(name);
}catch(Exception e)
{
//e.printStackTrace();
}
if(c!=null)
{
return c;
}else
{
byte[] data=getData(name);
if(data==null)
{
throw new ClassNotFoundException();
}else
{
c=defineClass(name,data,0,data.length);
System.out.println("yes");
}
}
}
return c;
}
private byte[] getData(String classname)
{
String path=dir+"/"+classname.replace('.', '/')+".class";
InputStream is=null;
ByteArrayOutputStream bos=new ByteArrayOutputStream();
try {
is=new FileInputStream(path);
int len=-1;
byte[] buffer=new byte[1024];
while((len=is.read(buffer))!=-1)
{
bos.write(buffer,0,len);
}
bos.flush();
return bos.toByteArray();
}catch(IOException e)
{
e.printStackTrace();
return null;
}finally {
try {
if(null!=is)
{
is.close();
}
}catch(IOException e)
{
e.printStackTrace();
}
try {
if(null!=bos)
{
bos.close();
}
}catch(IOException e)
{
e.printStackTrace();
}
}
}
}
javassist 创建java文件,然后使用自定义类加载器加载
public class One {
public static void main(String[] args) throws Exception {
ClassPool pool=ClassPool.getDefault();
CtClass cc=pool.makeClass("com.sxt.in.HelloWorld");
CtMethod m=CtMethod.make("public static void main(String[] args){System.out.println(\"aa\");}", cc);
cc.addMethod(m);
cc.writeFile("d:/myjava");
Loader loader =new Loader("d:/myjava");
Class<?> c=loader.loadClass("com.sxt.in.HelloWorld");
System.out.println(c.getClassLoader());
}
}
cmd编译创建的java文件:
C:\Users\10853>d:
D:\>cd myjava
D:\myjava>javac -d . HelloWorld.java
D:\myjava>java com.sxt.in.HelloWorld
aa
D:\myjava>
内容总结
以上是互联网集市为您收集整理的java JVM-自定义类加载器从零到有全部内容,希望文章能够帮你解决java JVM-自定义类加载器从零到有所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。