java 扫描包框架_java – 在Android中实现类似Spring的包扫描
我正在尝试为我正在开发的
Android框架实现类似于Spring的组件扫描的包扫描功能.基本上,我希望能够指定一个基本包,例如com.foo.bar并检索具有特定注释的所有Class实例.我不想用我的框架注册每个组件,因为这会破坏自动扫描的目的.
根据我的研究,似乎Java无法使用反射检索包名称的资源.但是,我简要介绍了Reflections framework,我想知道是否有与Android兼容的等价物.如果没有,或许有一种不那么明显的方式来完成我想做的事情.
我查看了Spring源代码,看看他们是如何实现这一目标的,但我不认为他们正在做什么会在Dalvik运行时内工作.
更新
目前,下面的代码是我能够检索包含特定注释的所有类的最佳代码,但坦率地说,这是一个非常糟糕的解决方案.它对ClassLoader做了一些非常安全的假设,并且它扫描(并加载)所有应用程序类.
public Set> getClassesWithAnnotation(Class extends Annotation> annotation) {
Set> classes = new HashSet>();
Field dexField = PathClassLoader.class.getDeclaredField("mDexs");
dexField.setAccessible(true);
PathClassLoader classLoader = (PathClassLoader) Thread.currentThread().getContextClassLoader();
DexFile[] dexs = (DexFile[]) dexField.get(classLoader);
for (DexFile dex : dexs) {
Enumeration entries = dex.entries();
while (entries.hasMoreElements()) {
String entry = entries.nextElement();
Class> entryClass = dex.loadClass(entry, classLoader);
if (entryClass != null && entryClass.isAnnotationPresent(annotation)) {
classes.add(entryClass);
}
}
}
return classes;
}
java 扫描包框架_java – 在Android中实现类似Spring的包扫描相关推荐
- java 扫描包框架_在Android中实现类似Spring的软件包扫描
我正在尝试为component- scan我正在开发的Android框架实施类似于Spring的软件包扫描功能.基本上,我希望能够指定基本包,例如,com.foo.bar并检索Class具有特定批注的 ...
- java中链式调用_Java及Android中常用链式调用写法简单示例
本文实例讲述了Java及Android中常用链式调用写法.分享给大家供大家参考,具体如下: 最近发现,目前大火的许多开源框架中,大多都使用了一种"(方法).(方法).(方法)"的形 ...
- java开源服务框架_Java框架服务
Java从诞生到现在,一路飙升,可以说红遍全球,红到发紫.随着Java的流行,促生了许多java框架:Spring.WebWork.Struts.HIbernate.JDiy.JFinal.Quart ...
- java接口文件定义类_Java入门笔记(四)类、包和接口
一.类 class public class Person{ String name; int age; Person(String name, int age){ this.name = name; ...
- java安卓计时器_如何在android中设置计时器
通过java.util.Timer和java.util.TimerTask使用计时器的标准Java方法在Android中运行良好,但是你应该知道这个方法创建了一个新线程. 您可以考虑使用非常方便的Ha ...
- java编译类代码_Java的源代码中定义几个类,编译结果就生成几个以“.class”后缀的字节码。...
[填空题]一个类实现某个接口时必须实现接口中声明的所有方法,否则该类必须定义为(__); [单选题]若有定义int a = 2;则执行完语句a += a -= a * a; 后,a的值是( ) [填空 ...
- java目前主流框架_java的三大主流框架介绍
<java的三大主流框架介绍>由会员分享,可在线阅读,更多相关<java的三大主流框架介绍(2页珍藏版)>请在装配图网上搜索. 1.java的三大主流框架介绍java的三大主流 ...
- java开发后端框架_java开发后端框架
1 java开发后端框架 java从推出到现在技术不断发展,语言也优化的越来越好,对于java工程师来说技术的不断发展,他们需要不断学习java进阶,而对于新手来说就能从基础到核心.那么新手该怎么学习 ...
- Java导入sql失败_java – 在hibernate中导入import.sql失败
我希望每次应用程序运行时自动删除表并创建一个新表,并自动插入预定义数据.我已经在import.sql中准备数据了.我已经在application.properties中设置了spring.jpa.hi ...
最新文章
- silverlight控件打印预览
- ArcGIS时态数据应用——动态展示3个月内犯罪案件数量变化
- java多线程创建runnable_Java线程池和runnables创建runnables
- 【首创】完美解决scrollview与menu的兼容问题
- python获取列表序号_确定列表中的序列号(Python)
- 企业运维经典面试题汇总(3)
- 小米9 -MIUI12.5稳定版卡刷包与线刷包-V12.5.3.0.RFACNXM
- 论文阅读:《Connectionist Temporal Classification: Labelling Unsegmented Sequence Data with Recurrent Neu》
- 国际学术会议-英文演讲稿
- 联想m5服务器管理口远程重启,服务器远程管理的两个技巧|R740|SR650|SR550|2288hv5|5270m5|联想存储|联想服务器|戴尔服务器|惠...
- 基于PyQt的网站后台工具
- Jquery 中 ajaxSubmit使用讲解
- Cisco Packet Tracer 4.7.2 连接物理层
- 微距摄影昆虫拍摄技巧
- 吉首大学第九届"新星杯"大学生程序设计大赛(重现赛)
- “对不起,你的离职是我的错!”
- 关于超级计算机的英语作文,关于无人驾驶的英文作文
- 繁简转换OpenCC,autogb 和 autob5,iconv,python的jianfan包
- 001-STM32+Air724UG(4G模组)基本控制篇(阿里云物联网平台)-使用MQTT接入阿里云物联网平台
- 面试突击90:过滤器和拦截器有什么区别?