2008-04-08
通过类加载器动态加载类,方便业务扩充
前段时间在考虑自定义桌面的问题,自定义桌面意味着每个用户的桌面可能都不一样,因此如何加载用户界面存在代码,来提高性能能?以及如何提供良好的扩展性呢?
考虑了一下,采用java的ClassLoader来实现,比较好。
实现如下:
--------------------通用接口,其他的处理类都implements这个接口---------------
package com.ray.qkm.client
public interface IAction {
public String process();
}
-----------------------------实现类1-------------------------
package com.ray.qkm.client
public class Test1 implements IAction {
public String process() {
return "hello world";
}
}
-----------------------------实现类2-------------------------
package com.ray.qkm.client
public class Test2 implements IAction {
public String process() {
return "hello world";
}
}
-------------------------动态加载----------------------------
package com.ray.qkm.client
import java.util.ArrayList;
import java.util.List;
public class TestClassLoader {
/**
* @param args
* @throws ClassNotFoundException
* @throws IllegalAccessException
* @throws InstantiationException
*/
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
//这部分的集合数据可以通过其他方式加载进来
List cc = new ArrayList();
cc.add("com.ray.qkm.client.Test1");
cc.add("com.ray.qkm.client.Test2");
cc.add("com.ray.qkm.client.Test3");
ClassLoader loader = ClassLoader.getSystemClassLoader();
for (int i=0; i<cc.size(); i++) {
Class c = loader.loadClass(cc.get(i).toString());
IAction tt = (IAction)c.newInstance();
System.out.println(tt.process());
}
}
}
-----------------------------------------------------------------------------
虽然很简单,但是很实用。
考虑了一下,采用java的ClassLoader来实现,比较好。
实现如下:
--------------------通用接口,其他的处理类都implements这个接口---------------
package com.ray.qkm.client
public interface IAction {
public String process();
}
-----------------------------实现类1-------------------------
package com.ray.qkm.client
public class Test1 implements IAction {
public String process() {
return "hello world";
}
}
-----------------------------实现类2-------------------------
package com.ray.qkm.client
public class Test2 implements IAction {
public String process() {
return "hello world";
}
}
-------------------------动态加载----------------------------
package com.ray.qkm.client
import java.util.ArrayList;
import java.util.List;
public class TestClassLoader {
/**
* @param args
* @throws ClassNotFoundException
* @throws IllegalAccessException
* @throws InstantiationException
*/
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
//这部分的集合数据可以通过其他方式加载进来
List cc = new ArrayList();
cc.add("com.ray.qkm.client.Test1");
cc.add("com.ray.qkm.client.Test2");
cc.add("com.ray.qkm.client.Test3");
ClassLoader loader = ClassLoader.getSystemClassLoader();
for (int i=0; i<cc.size(); i++) {
Class c = loader.loadClass(cc.get(i).toString());
IAction tt = (IAction)c.newInstance();
System.out.println(tt.process());
}
}
}
-----------------------------------------------------------------------------
虽然很简单,但是很实用。
发表评论
- 浏览: 24233 次
- 性别:

- 来自: 安徽

- 详细资料
搜索本博客
我的相册
s1125472579
共 14 张
共 14 张
最近加入圈子
最新评论
-
遍历Set
lz你文不对题啊,你写的明明是遍历hashmap,怎么题目是遍历set,难道是这 ...
-- by Struts_Spring -
MMORPG
...
-- by kayo -
几种java开源缓存系统的性 ...
...
-- by kayo -
[原创]利用IOC的概念改 ...
请你阅读这篇文章,也许对你有点作用。http://kayo.javaeye.co ...
-- by kayo -
[原创]利用IOC的概念改 ...
你好,向你请教关于java的数据采集技术,不知道怎么做,希望你能给例子,谢谢。 ...
-- by looxiaohu






评论排行榜