`
jayjayjaylun
  • 浏览: 89995 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Thread context class loader

    博客分类:
  • java
FOo 
阅读更多
security.MyClassLoaderTest 入口点
Class security.MyClassLoaderTest 

package security;

import java.lang.reflect.Method;
import java.net.URL;

public class MyClassLoaderTest {

    public static void main(final String[] args) throws Exception {

        URL[] urls = new URL[] {new URL("file://C:/temp4Java/external_classes/")};
        PluginClassLoader pluginClassLoader = new PluginClassLoader(urls, MyClassLoaderTest.class.getClassLoader());

        ClassLoader old = Thread.currentThread().getContextClassLoader();
        Thread.currentThread().setContextClassLoader(pluginClassLoader);
        invokePulginMethod();
        Thread.currentThread().setContextClassLoader(old);
    }

    public static void invokePulginMethod() throws Exception {
        ClassLoader loader = Thread.currentThread().getContextClassLoader();

        Class clazz = loader.loadClass("gc.Foo");

        Method method = clazz.getMethod("say", (Class[]) null);

        method.setAccessible(true);
        Object obj = clazz.newInstance();
        method.invoke(obj, (Object[]) null);

        System.out.println(clazz);
        System.out.println(clazz.getClassLoader());
        System.out.println(clazz.getClassLoader().getParent());
    }
}

  

//output:

 

hei Man I am here!
class gc.Foo
security.PluginClassLoader@600060
sun.misc.Launcher$AppClassLoader@61c861c8

 

 

 Custome ClassLoader:

 

package security;

import java.net.URL;
import java.net.URLClassLoader;

public class PluginClassLoader extends URLClassLoader {

    public PluginClassLoader(final URL[] urls, final ClassLoader parent) {
        super(urls, parent);
    }

}

 

gc.Foo编译好了之后放到C:/temp4Java/external_classes/底下

 

package gc;

public class Foo {

    public void say() {

        System.out.println("hei Man I am here!");
    }
}

 

 

Bootstrap

    |

Extension

  |

System

 |

Customer

 

如果你要想在 System ClassLoader 加载的类里面使用 位于 Customer class loader指定位置的类,

办法就是只能在 System ClassLoader 加载的类里面获得一个Customer class loader,OK! 这样你就可以折腾它(Customer class loader,) 里面的类了.

 

怎么取得了:

1. 传个reference 到 System ClassLoader 加载的类.

2. 放到T hread.setContextContext 里面.

 

Done!!  Thread.getContextContext 就是这么折腾的

记录之

分享到:
评论

相关推荐

    linbei是真的好哦

    线程上下文类加载器(Thread Context ClassLoader)则用于在特定线程中加载类,这对于插件化和应用服务器等复杂环境尤为重要。 2. **语法糖**:这是编程语言中的一种特性,使得代码更简洁、易读。Java中的语法糖如...

    使用Universal-Image-Loader加载系统图片并放大显示

    ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context) .defaultDisplayImageOptions(defaultOptions) .threadPoolSize(5) // 设置线程池大小 .threadPriority(Thread.NORM_PRIORITY...

    White paper

    2. **线程上下文类加载器(Thread Context ClassLoader)**:这是另一种解决类加载问题的方法。每个线程都有一个与之关联的类加载器,称为线程上下文类加载器。默认情况下,它是应用程序的类加载器。在扩展区中,...

    android异步在网络上读取多张图片,显示在页面布局GridView,viewPager,gallery,ListView

    Android提供了多种异步处理机制,如AsyncTask、Handler、Thread/Runnable、IntentService以及第三方库如Volley、Retrofit、OkHttp等。这里主要讨论使用AsyncTask和Loader进行网络图片加载。 二、使用AsyncTask加载...

    listView加载多线程异步下载的图片

    在Android中,我们可以使用`Thread`、`AsyncTask`、`Handler`、`Looper`、`Runnable`以及`ExecutorService`等工具来创建和管理线程。特别是在处理耗时操作如网络请求和图片解码时,我们会选择在后台线程进行,以避免...

    Android开源框架ImageLoader的完美例子

    .threadPriority(Thread.NORM_PRIORITY - 2) // 加载图片的线程数 .denyCacheImageMultipleSizesInMemory() // 解码图像的大尺寸将在内存中缓存先前解码图像的小尺寸。 .discCacheFileNameGenerator(new Md5...

    Tomcat.ClassLoader.rar_Java编程_Java_

    本资料“Tomcat.ClassLoader.rar”聚焦于Java的类加载器(Class Loader)以及它在Tomcat容器中的工作原理,这对于理解和优化Java应用程序的性能至关重要。 首先,让我们深入了解Java ClassLoader。在Java中,...

    android 异步任务加载

    因此,如果你的应用需要兼容更低版本的Android系统,或者需要处理跨进程的异步任务,可以考虑使用其他机制,如IntentService、Handler、Loader或者使用第三方库如RxJava、LiveData等。 总的来说,Android的异步任务...

    Android ImageLoader第三方框架解析

    首先,你需要将`universal-image-loader-1.9.5.jar`库文件导入到你的Android项目中。这可以通过将jar包添加到项目的libs目录,然后在构建路径中包含它来完成。一旦库被导入,你需要在自定义的`Application`类(如`My...

    AsyncTask基本使用

    public class MyAsyncTask extends AsyncTask, Integer, String> { @Override protected void onPreExecute() { // 显示进度条或对话框 } @Override protected String doInBackground(Void... voids) { //...

    Apache Geronimo 2.1_ Quick Reference.pdf

    Class loader architecture 35 Modifying default class loading behavior 36 Important modules 37 Server directory structure 40 Deployment architecture 42 Deployer 42 Repository 43 Configuration ...

    Tricks of the Windows video Game Programming---part1

    World Windows Applications (Without Puck)..............................66 The Windows Class ..............................................................................66 Registering the ...

Global site tag (gtag.js) - Google Analytics