`
kayo
  • 浏览: 556578 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

通过类加载器动态加载类,方便业务扩充

阅读更多
前段时间在考虑自定义桌面的问题,自定义桌面意味着每个用户的桌面可能都不一样,因此如何加载用户界面存在代码,来提高性能能?以及如何提供良好的扩展性呢?

考虑了一下,采用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笔试题(附参考标准答案).docx

    - 当一个类加载器被请求加载某个类时,它会首先尝试让其父加载器加载该类。只有当父加载器无法加载时,才会由请求的加载器自己加载。 **3. == 和 equals 的区别** - `==`:用于比较两个对象的引用是否指向同一个...

    Java中级面试题

    - **双亲委派模型**: 当一个类加载器收到加载类的请求时,首先将加载任务委托给父类加载器尝试完成;只有当父类加载器无法完成时才会自己尝试加载。 - **层次结构**: - **Bootstrap ClassLoader**(启动类加载器):...

    软件架构设计之常用架构模式.doc

    当一个 web 请求来了以后 View 接收这个请求,随即把请求转发给 Control 进行处理,Control 通过分析请求的类型等信息决定加载哪些 Model,当 Model 加载完成以后 Control 通知 Model 已经加载完毕,这是 View 就去...

    android-bulking:通过尝试RoboSpice + Retrofit,渲染器,ActiveAndroid,Mosby,设计支持库,毕加索和计数来扩充我的知识核心

    通过定义不同的渲染器,你可以根据数据模型动态地改变视图的显示方式。 4. **ActiveAndroid**: ActiveAndroid 是一个轻量级的ORM(对象关系映射)库,允许开发者以更面向对象的方式操作数据库。通过简单的注解,...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    这些都预示着我们进入了一个新的互联网阶段web 2.0,它是相对web 1.0的新的一类互联网应用的总称,是一次从核心内容到外部应用的革命[10]。这个阶段发展迅速,互联网应用趋于多样化,其中变化最大的是由web 1.0网站...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    安卓上用于加载的Webview视图窗口只是作为类浏览器而存在,在安卓上更是只能同时运行一个Webview。(2)跨域数据交互问题。不同的Webview之间无法共享数据。(3)页面自适应问题。页面难以兼容适应不同分辨率的设备...

    2021-2022计算机二级等级考试试题及答案No.1394.docx

    18. 数据库实施:数据库实施阶段包括建立数据库、加载数据和系统调试,不包括扩充功能。正确答案:B。 19. 访问修饰符:private表示私有,只能在类内部访问;protected表示保护,允许类内部和子类访问;public表示...

    中文版RFC,共456

    RFC2475 分类业务的体系结构 RFC2492 IPv6 通过ATM网络 RFC2495 有关 DS1,E1,DS2,E2接口类型的管理部件的定义 RFC2508 低速串行链路下IP/UDP/RTP数据包头的压缩 RFC2511 Internet X.509认证请求消息格式 RFC2516 在...

    RFC中文文档-txt

    RFC2475 分类业务的体系结构 RFC2492 IPv6 通过ATM网络 RFC2495 有关 DS1,E1,DS2,E2接口类型的管理部件的定义 RFC2508 低速串行链路下IP/UDP/RTP数据包头的压缩 RFC2511 Internet X.509认证请求消息格式 RFC2516 在...

    rfc中文文档目录,包含部分翻译

    RFC2046 多用途Internet邮件扩展(多用途网际邮件扩充协议(MIME))第二部分:媒体类型 RFC2053 AM (美国)域 RFC2078 通用安全服务应用接口(GSS-API) V2 RFC2079 X.500 属性类型和对象类别去掌握统一资源定位器...

    2021-2022计算机二级等级考试试题及答案No.12270.docx

    - **知识点**:数据库实施阶段的主要任务包括建立数据库、加载数据、系统调试等,而“扩充功能”通常属于后续的维护或升级阶段。 ### 10. 主频的概念 - **知识点**:主频指的是CPU的时钟频率,用MHz(兆赫兹)表示...

Global site tag (gtag.js) - Google Analytics