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 就是这么折腾的
记录之
分享到:
相关推荐
线程上下文类加载器(Thread Context ClassLoader)则用于在特定线程中加载类,这对于插件化和应用服务器等复杂环境尤为重要。 2. **语法糖**:这是编程语言中的一种特性,使得代码更简洁、易读。Java中的语法糖如...
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context) .defaultDisplayImageOptions(defaultOptions) .threadPoolSize(5) // 设置线程池大小 .threadPriority(Thread.NORM_PRIORITY...
Android提供了多种异步处理机制,如AsyncTask、Handler、Thread/Runnable、IntentService以及第三方库如Volley、Retrofit、OkHttp等。这里主要讨论使用AsyncTask和Loader进行网络图片加载。 二、使用AsyncTask加载...
在Android中,我们可以使用`Thread`、`AsyncTask`、`Handler`、`Looper`、`Runnable`以及`ExecutorService`等工具来创建和管理线程。特别是在处理耗时操作如网络请求和图片解码时,我们会选择在后台线程进行,以避免...
.threadPriority(Thread.NORM_PRIORITY - 2) // 加载图片的线程数 .denyCacheImageMultipleSizesInMemory() // 解码图像的大尺寸将在内存中缓存先前解码图像的小尺寸。 .discCacheFileNameGenerator(new Md5...
本资料“Tomcat.ClassLoader.rar”聚焦于Java的类加载器(Class Loader)以及它在Tomcat容器中的工作原理,这对于理解和优化Java应用程序的性能至关重要。 首先,让我们深入了解Java ClassLoader。在Java中,...
因此,如果你的应用需要兼容更低版本的Android系统,或者需要处理跨进程的异步任务,可以考虑使用其他机制,如IntentService、Handler、Loader或者使用第三方库如RxJava、LiveData等。 总的来说,Android的异步任务...
首先,你需要将`universal-image-loader-1.9.5.jar`库文件导入到你的Android项目中。这可以通过将jar包添加到项目的libs目录,然后在构建路径中包含它来完成。一旦库被导入,你需要在自定义的`Application`类(如`My...
public class MyAsyncTask extends AsyncTask, Integer, String> { @Override protected void onPreExecute() { // 显示进度条或对话框 } @Override protected String doInBackground(Void... voids) { //...
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 ...
World Windows Applications (Without Puck)..............................66 The Windows Class ..............................................................................66 Registering the ...