public static void main(String[] args) {
String pkgs = "com";
loadByClassLoader(pkgs);
//loadByResolverUtil();
}
public static void loadByResolverUtil(String pkgs){
ResolverUtil<Class> resolver = new ResolverUtil<Class>();
resolver.findInPackage(new Test() {
public boolean matches(Class type) {
// TODO: should also find annotated classes
// return (Action.class.isAssignableFrom(type) ||
// type.getSimpleName().endsWith("Action"));
return true;
}
}, pkgs);
System.out.println(resolver.getClasses().size());
for (Class<?> actionClass : resolver.getClasses()) {
System.out.println(actionClass.getName());
}
}
public static void loadByClassLoader(String pkgs) {
ClassLoader loader = ClassLoader.getSystemClassLoader();
Enumeration<URL> urls;
try {
urls = loader.getResources(pkgs);
while (urls.hasMoreElements()) {
String urlPath = urls.nextElement().getFile();
// urlPath = URLDecoder.decode(urlPath, "UTF-8");
// If it's a file in a directory, trim the stupid file: spec
if (urlPath.startsWith("file:"))
urlPath = urlPath.substring(5);
// Else it's in a JAR, grab the path to the jar
if (urlPath.indexOf('!') > 0)
urlPath = urlPath.substring(0, urlPath.indexOf('!'));
// log.info("Scanning for classes in [" + urlPath + "] matching
// criteria: " + test);
File file = new File(urlPath);
if (file.isDirectory())
loadImplementationsInDirectory(pkgs, file);
else
loadImplementationsInJar(pkgs, file);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void loadImplementationsInDirectory(String parent, File location) {
File[] files = location.listFiles();
StringBuilder builder = null;
for (File file : files) {
builder = new StringBuilder(100);
builder.append(parent).append("/").append(file.getName());
String packageOrClass = (parent == null ? file.getName() : builder.toString());
if (file.isDirectory())
loadImplementationsInDirectory(packageOrClass, file);
else if (file.getName().endsWith(".class"))
addIfMatching(packageOrClass);
}
}
/**
* Finds matching classes within a jar files that contains a folder
* structure matching the package structure. If the File is not a JarFile or
* does not exist a warning will be logged, but no error will be raised.
*
* @param test
* a Test used to filter the classes that are discovered
* @param parent
* the parent package under which classes must be in order to be
* considered
* @param jarfile
* the jar file to be examined for classes
*/
public static void loadImplementationsInJar(String parent, File jarfile) {
try {
JarEntry entry;
JarInputStream jarStream = new JarInputStream(new FileInputStream(jarfile));
while ((entry = jarStream.getNextJarEntry()) != null) {
String name = entry.getName();
if (!entry.isDirectory() && name.startsWith(parent) && name.endsWith(".class"))
addIfMatching(name);
}
} catch (IOException ioe) {
System.out.println("Could not search jar file '" + jarfile + "' for classes matching criteria: " + " due to an IOException");
}
}
public static void addIfMatching(String fqn) {
try {
String externalName = fqn.substring(0, fqn.indexOf('.')).replace('/', '.');
ClassLoader loader = ClassLoader.getSystemClassLoader();
/*
* if (log.isDebugEnabled()) { log.debug("Checking to see if class " +
* externalName + " matches criteria [" + test + "]"); }
*/
Class type = loader.loadClass(externalName);
System.out.println(type.getName());
} catch (Throwable t) {
System.out.println("Could not examine class '" + fqn + "' due to a " + t.getClass().getName() + " with message: " + t.getMessage());
}
}
分享到:
相关推荐
web类加载器的小例子,可以供大家参考,谢谢!
本classloader可以从ftp或本地系统中动态的加载jar,zip资源,当资源实时变动时classlader会自动重新加载,不需要应用重新启动。样例: 加载ftp上某个目录下的所有jar,zip资源。 SingleClassLoader loader = new ...
包装tank.test; 导入java.util.Scanner; 导入tank.classloader.ClassLoaderManager; 导入tank.classloader.MyClassLoaderManager; 导入tank.classloader.SystemClassLoaderManager; / ** @作者坦克 @date:2015...
重新载入Java 支持类重载的ClassLoader的简单实现运行示例构建项目开始示例 gradle buildjava -cp build/classes/test/:build/libs/reload-java-1.0.jar reload.ReloadExample1该应用程序将等待输入,输入r + 已加载...
一个 JUnit 测试运行器,它在单独的ClassLoader中加载测试类和可选的指定类。 这意味着静态成员将在每个测试类之间有效地重置,因为这些类的新版本被加载。 Maven 依赖 < groupId>com.binarytweed</ groupId> ...
VirtualFile testFile = home.getChild("test.txt"); ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); Resource[] resources = resolver.getResources("/home/test.txt"); ...
虚拟机为HotSpot 1.类加载器 类加载器一般只有3种(除开自己定义的)分别为: 1.Bootstrap ClassLoader:根加载器 2.Extension ClassLoader:扩展加载器 3.System ClassLoader:系统加载器 ...public class Test01 { p
$loader = new \Composer\Autoload\ClassLoader(); $loader->add('Purl\Test', __DIR__); $loader->register(); });统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是...
字节码程序java-agent-and-instrument java-agent-and-instrument-test APM ,追踪, 方法增强, 热模块替代品 完毕 空中漫步查明拉链框架开发,例如:dubbo,spring, arthas,jrebel等。 连接池 连接池 德鲁伊,...
Java_ClassLoader Java_Copy_On_Write Java_Exception Java_ExecutorService Java_IO Java_JVM_Monitor Java_Jstat Java_Lambda Java_Memory Java_Node Java_Photo_Base64AndZip Java_Request_GetIP Java_Shiro_...
模仿蓝桥杯java练习系统技术栈: SSM、MySQL需求分析: 模仿蓝桥杯做一个在线练习JAVA算法系统1、用户用浏览器提交JAVA源码2、服务端把JAVA源码存为.java文件3、用ClassLoader把.java文件解析为.class文件4、用反射...
public function test() { return ‘1asdasd111’; } } 在 app/start/global.php 复制代码 代码如下: ClassLoader::addDirectories(array( app_path().’/commands’, app_path().’/controllers’, app_path().’/...
ClassLoader │ │ ├── Enum │ │ ├── Integer │ │ ├── Long │ │ ├── String │ │ ├── ThreadLocal ├── javax/ ├── launcher/ ├── org/ To do a test for git cherry-pick. 技术交流 ...
1、ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); //获取当前线程类加载器 2、InputStream is = classLoader.getResourceAsStream("文件路径/文件名");//通过当前线程的类...
-javaagent:d:/test/collection-agent-1.0.0-SNAPSHOT.jar=size=100000 size 限制的集合大小 #另附 javaAgent是从JDK1.5及以后引入的,在1.5之前无法使用,也可以叫做java代理。 代理 (agent) 是在main方法前的一个...
作者与学习乐园原始码地址:我的作者:项目结构src目录Java虚拟机核心知识点学习代码并测试案例test目录(测试包名与src目录保持一致)对应学习代码包的详细测试案例包目录: ├── org.jvmcore.classloader// 类...
JavaTest java的测试项目,可以看做是java的ApiDemo,主要用于学习,也经常用来测试极光,七牛等服务器api, 实际上有什么好代码都可以加进来,直到这个工程不堪其重 目录: 目录 [java高级] [Ayo库] 集合 ...
DexClassLoader的parent设置为宿主程序的classloader,即可将主程序和插件程序的class贯通 2、插件apk的资源 通过构造插件apk的AssetManager和Resouce类即可。 本项目最关键一点功能、也是和网上其他插件项目...
Customizing the Restart Classloader 20.2.7. Known Limitations 20.3. LiveReload 20.4. Global Settings 20.5. Remote Applications 20.5.1. Running the Remote Client Application 20.5.2. Remote Update 21. ...
struts 2.3.4.1 最新英文版API ======================================================...com.opensymphony.xwork2.util.classloader com.opensymphony.xwork2.util.finder com.opensymphony.xwork2.util.fs ...