import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashSet;
class CustomCL extends ClassLoader {
private String basedir; // 需要该类加载器直接加载的类文件的基目录
private HashSet dynaclazns; // 需要由该类加载器直接加载的类名
public CustomCL(String basedir, String[] clazns) {
super(null); // 指定父类加载器为 null
this.basedir = basedir;
dynaclazns = new HashSet();
loadClassByMe(clazns);
}
private void loadClassByMe(String[] clazns) {
for (int i = 0; i < clazns.length; i++) {
loadDirectly(clazns[i]);
dynaclazns.add(clazns[i]);
}
}
private Class loadDirectly(String name) {
Class cls = null;
StringBuffer sb = new StringBuffer(basedir);
String classname = name.replace('.', File.separatorChar) + ".class";
sb.append(File.separator + classname);
File classF = new File(sb.toString());
try {
cls = instantiateClass(name, new FileInputStream(classF),
classF.length());
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return cls;
}
private Class instantiateClass(String name, InputStream fin, long len) {
byte[] raw = new byte[(int) len];
try {
fin.read(raw);
fin.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return defineClass(name, raw, 0, raw.length);
}
protected Class loadClass(String name, boolean resolve) throws ClassNotFoundException {
Class cls = null;
cls = findLoadedClass(name);
if (!this.dynaclazns.contains(name) && cls == null)
cls = getSystemClassLoader().loadClass(name);
if (cls == null)
throw new ClassNotFoundException(name);
if (resolve)
resolveClass(cls);
return cls;
}
}
import java.lang.reflect.Method;
import java.util.TimerTask;
public class TimeTask extends TimerTask {
// 在这里写你要定时执行的方法
public void run() {
//System.out.println("Hello World!");
try {
// 每次都创建出一个新的类加载器
String baseDir = Test.class.getResource("/").getPath();
/*System.out.println(ClassLoader.getSystemResource(""));
System.out.println(Test.class.getResource(""));
System.out.println(Test.class.getResource("/")); //Class文件所在路径
System.out.println(new File("/").getAbsolutePath());
System.out.println(System.getProperty("user.dir"));*/
CustomCL cl = new CustomCL(baseDir, new String[] { "com.strongit.test.Foo" });
Class cls = cl.loadClass("com.strongit.test.Foo");
Object foo = cls.newInstance();
Method m = foo.getClass().getMethod("sayHello", new Class[] {});
m.invoke(foo, new Object[] {});
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
public class Foo {
/**
* @param args
*/
public void sayHello() {
// TODO Auto-generated method stub
System.out.println("hello world! (version one)");
}
}
分享到:
相关推荐
自定义Java类加载器demo,自定义了一个classLoader,重写了loadClass 和findClass,注意 loadClass打破了双亲委派机制,所有的类都要在自定义的class文件中找到,而findClass遵循了双亲委派机制
一个基于.NET C# 开发的 Winform 自定义表单设计组件。支持Xml保存和加载表单,支持控件的拖放和属设置,支持复制、粘贴、对齐、撤销、重做等设计时操作。
vb.net 自定义控件 自定义属性 UITypeEditor UI 类型编辑器 实例 提供一个示例 UITypeEditor,它使用 IWindowsFormsEditorService 显示用于用户输入的 Form。 IWindowsFormsEditorService 只能通过 PropertyGrid ...
Android 中LayoutInflater(布局加载器)之实战篇 博客的Demo 博客地址: http://blog.csdn.net/l540675759/article/details/78112989 两种方式实现小红书的引导页: (1)自定义View (2)自定义LayoutInflater....
https://dribbble.com/shots/4423936-Islands-Preloader-Animation Demo htt使用自定义的React Native弹跳预加载器弹跳预加载器组件React Native中的图标基于Dany Rizky拍摄的运球:...
应用启动页自定义跳转计时器View Demo: CircleTextProgressbar.java: package com.demo.startpageskiptimerdemo.widget; import android.content.Context; import android.content.res.ColorStateList; import ...
简单的自定义选择器demo,和两种加载选择数据源方式,内容经典不解释
简明、完整、全面的安卓开发demo集合,包含如下示例 1、LinearLayout Button、RadioGroup、 CheckBox 2、TableLayout 3、FrameLayout 霓虹灯效果 4、RelativeLayout 梅花效果 5、自定义view跟着触点走的小球 6、 ...
其中包括其他项目特定的标头(包括 Resource.h),并声明 CZLG_UDS_DEMOApp 应用程序类。 ZLG_UDS_DEMO.cpp 这是包含应用程序类 CZLG_UDS_DEMOApp 的主应用程序源文件。 ZLG_UDS_DEMO.rc 这是程序使用的所有 ...
其中包括其他项目特定的标头(包括 Resource.h),并声明 CZLG_UDS_DEMOApp 应用程序类。 ZLG_UDS_DEMO.cpp 这是包含应用程序类 CZLG_UDS_DEMOApp 的主应用程序源文件。 ZLG_UDS_DEMO.rc 这是程序使用的所有 ...
以一个实际的小例子,演示关于使用ClassLoader实现自定义多组件的加载Demo,可以帮助理解类加载器的双亲委托及破坏。
自动加载修改后的java文件,开发过程中无需重启web server AOP支持,拦截器配置灵活,功能强大 Plugin体系结构,扩展性强 多视图支持,支持FreeMarker、JSP、Velocity 强大的Validator后端校验功能 功能...
Android仿微信图片选择器Demo/具备剪裁/自定义图片加载器等功能
但是最终还是要训练自己的数据,所以尝试准备加载自定义的数据,然而demo中只是出现了fashion_mnist.load_data()并没有详细的读取过程,随后我又找了些资料,把读取的过程记录在这里。 首先提一下需要用到的模块: ...
IKAnalyzer非常易用的java分词工具。可以自定义扩展词汇。...这个是一个完整的java项目demo。直接可以用,不用再去google下载了。添加了几个自定义词汇,测试好用。 运行ika.java里的main方法即可
fragment 懒加载和预加载的处理,有两个demo 都可以实现懒加在以及取消预加载
支持根据服务端返回的数据动态设置广告条的总页数 支持大于等于1页时的无限循环自动轮播、手指按下暂停轮播、抬起手指开始轮播 支持自定义状态指示点位置 左 、中 、右 支持自定义状态指示点 支持监听 item 点击事件...
日历表格面板 [ConfigLine.java] 控制条类 [RoundBox.java] 限定选择控件 [MonthMaker.java] 月份表算法类 [Pallet.java] 调色板,统一配色类 Java扫雷源码 Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接...
日历表格面板 [ConfigLine.java] 控制条类 [RoundBox.java] 限定选择控件 [MonthMaker.java] 月份表算法类 [Pallet.java] 调色板,统一配色类 Java扫雷源码 Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接...
苹果ios开发150个实例源码大全: ...加载器(当下载或加载缓存时候用的进度条) 可以左右滚动的tab bar 可以拖动图片,并可以进行图片旋转的demo 可以用于录音或其他方面的开始或播放动态圆形加载 可以用手指