`
稻-草
  • 浏览: 61945 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

自定义ClassLoader和反射

    博客分类:
  • Java
阅读更多
package reflect;

import java.io.IOException;
import java.io.InputStream;
import java.nio.ByteBuffer;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;

public class TestClassLoader extends ClassLoader
{
    
    @Override
    protected Class<?> findClass(String name) throws ClassNotFoundException
    {
        InputStream in = null;
        try
        {
            String jarFilePath = "C:/XXXX/omu.jar";
            //String classfile = "com/XXX/ABC.class";
            
            JarFile jarFile = new JarFile(jarFilePath);
            JarEntry entry = jarFile.getJarEntry(name);
            if (entry == null)
            {
                return super.findClass(name);
            }
            in = jarFile.getInputStream(entry); 
            int  size = (int)entry.getSize();
            
            byte[] b = new byte[size];
//            ByteBuffer bytebuffer = ByteBuffer.allocate(size);
            
            int offset = 0;
            while(true)
            {
                
                int length = in.read(b,offset,size-offset);
                offset += length;
                if (offset>=size)
                {
                    break; 
                }
            }
            
            
            return defineClass(name, b, 0, size);
            
        }
        catch (IOException e)
        {
            //throw new ClassNotFoundException(name, e);
            return super.findClass(name);
        }
        finally
        {
            if (in != null)
            {
                try
                {
                    in.close();
                }
                catch (IOException e)
                {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
     
        
    }    

    public static void main(String[] args) throws ClassNotFoundException
    {
        TestClassLoader loader = new TestClassLoader();
        Class<?> classDef = loader.loadClass("com.upgrade.UpgradeMain"); 
        
        System.out.println(classDef);
    }
   
}

 

 

            Class classDefinition = Class.forName(className);
            Object object = classDefinition.newInstance();
            
            Class[] args = new Class[]{int.class, int.class};
            Method m = classDefinition.getMethod("setSize", args );
            
            m.invoke(object, 5, 6); // 调用这个类的setSize(int , int ) 方法

 

 

分享到:
评论

相关推荐

    Java实现热加载完整代码;Java动态加载class;Java覆盖已加载的class;Java自定义classloader

    让Java支持热加载是个不错的想法。如何做到的呢? 1. 定义好接口和实现类 2. 让代理类通过反射的方式调用实现类,对外暴露的是代理类。 3. 自定义URLClassLoader。检查实现类.class文件的...Java自定义classloader;

    使用自定义ClassLoader解决反序列化serialVesionUID不一致问题 _ 回忆飘如雪1

    案1:修改序列化byte数据该法可解决序列化最终数据的serialVesionUID不致,但法解决Object的serialVesionUID不案2:反射修改s

    ClassLoader 案例

    自定义ClassLoader,控制台输入调试。 运行期间 重新载入指定目录的class文件。可实现对于类的功能函数更新。 用到java 反射,@interface 等技术

    service_classloader

    工程名为service_classloader,功能全部使用corejava实现,使用maven管理依赖,没有使用任何框架(junit除外)。 使用的技术主要包括:classlaoder,加密解密,线程,ThreadLocal使用,反射,IO操作,jdbc, 序列化,...

    JSP开发实用技术整理

    13. 自定义ClassLoader 13 14. double保留两位数的两个方案 18 16. 用户输入输出,文件输入输出范例(1) 19 17.以指定符号分割显示 22 17. 单例模式 22 18. 工厂模式 23 19. 读取配置文件(1) 25 20. 根据libName动态...

    day021-反射和注解笔记和代码.rar

    1.2 static 类&lt;?&gt; forName(String name, boolean initialize, ClassLoader loader) name:全限定路径名 initialize:表示是否初始化,默认是false loader:可以指定一个类加载器加载...

    ClassLoaderTest:测试如何正确关闭类加载器,以便可以关闭基础jar文件上的文件句柄

    ClassLoaderTest 测试自定义的URLClassLoader以加载类 测试如何正确关闭类加载器。 测试如何使用反射关闭JarFile来修复资源泄漏。

    Android插件框架Android-Plugin-Framework.zip

    DexClassLoader的parent设置为宿主程序的classloader,即可将主程序和插件程序的class贯通 2、插件apk的资源 通过构造插件apk的AssetManager和Resouce类即可。 本项目最关键一点功能、也是和网上其他插件项目...

    JavaScript SDK-开源

    浏览器独立的 JavaScript SDK... ClassLoader 延迟加载 JavaScript 类、核心 JavaScript 的扩展、反射 API、集合 API、单元测试 API、AJAX API、日志 API 和自定义/DOM 事件 API。 JavaScript 应该是什么,可以是什么。

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

    15.2.2 建立classloader实例 518 15.3 重点复习 520 15.4 课后练习 521 chapter16 自定义泛型、枚举与标注 523 16.1 自定义泛型 524 16.1.1 定义泛型方法 524 16.1.2 使用extends与? 525 16.1.3 使用...

    Spring.3.x企业应用开发实战(完整版).part2

    3.2.2 类装载器ClassLoader 3.2.3 Java反射机制 3.3 资源访问利器 3.3.1 资源抽象接口 3.3.2 资源加载 3.4 BeanFactory和ApplicationContext 3.4.1 BeanFactory介绍 3.4.2 ApplicationContext介绍 3.4.3 父子容器 ...

    Spring3.x企业应用开发实战(完整版) part1

    3.2.2 类装载器ClassLoader 3.2.3 Java反射机制 3.3 资源访问利器 3.3.1 资源抽象接口 3.3.2 资源加载 3.4 BeanFactory和ApplicationContext 3.4.1 BeanFactory介绍 3.4.2 ApplicationContext介绍 3.4.3 父子容器 ...

    JAVA核心知识点整理(有效)

    25 3:ServicorTo 和 ServicorFrom 互换................................................................................................................25 2.3.3.1. 2.4.1. 如何确定垃圾 ......................

Global site tag (gtag.js) - Google Analytics