我正在尝试为我正在开发的

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的包扫描相关推荐

  1. java 扫描包框架_在Android中实现类似Spring的软件包扫描

    我正在尝试为component- scan我正在开发的Android框架实施类似于Spring的软件包扫描功能.基本上,我希望能够指定基本包,例如,com.foo.bar并检索Class具有特定批注的 ...

  2. java中链式调用_Java及Android中常用链式调用写法简单示例

    本文实例讲述了Java及Android中常用链式调用写法.分享给大家供大家参考,具体如下: 最近发现,目前大火的许多开源框架中,大多都使用了一种"(方法).(方法).(方法)"的形 ...

  3. java开源服务框架_Java框架服务

    Java从诞生到现在,一路飙升,可以说红遍全球,红到发紫.随着Java的流行,促生了许多java框架:Spring.WebWork.Struts.HIbernate.JDiy.JFinal.Quart ...

  4. java接口文件定义类_Java入门笔记(四)类、包和接口

    一.类 class public class Person{ String name; int age; Person(String name, int age){ this.name = name; ...

  5. java安卓计时器_如何在android中设置计时器

    通过java.util.Timer和java.util.TimerTask使用计时器的标准Java方法在Android中运行良好,但是你应该知道这个方法创建了一个新线程. 您可以考虑使用非常方便的Ha ...

  6. java编译类代码_Java的源代码中定义几个类,编译结果就生成几个以“.class”后缀的字节码。...

    [填空题]一个类实现某个接口时必须实现接口中声明的所有方法,否则该类必须定义为(__); [单选题]若有定义int a = 2;则执行完语句a += a -= a * a; 后,a的值是( ) [填空 ...

  7. java目前主流框架_java的三大主流框架介绍

    <java的三大主流框架介绍>由会员分享,可在线阅读,更多相关<java的三大主流框架介绍(2页珍藏版)>请在装配图网上搜索. 1.java的三大主流框架介绍java的三大主流 ...

  8. java开发后端框架_java开发后端框架

    1 java开发后端框架 java从推出到现在技术不断发展,语言也优化的越来越好,对于java工程师来说技术的不断发展,他们需要不断学习java进阶,而对于新手来说就能从基础到核心.那么新手该怎么学习 ...

  9. Java导入sql失败_java – 在hibernate中导入import.sql失败

    我希望每次应用程序运行时自动删除表并创建一个新表,并自动插入预定义数据.我已经在import.sql中准备数据了.我已经在application.properties中设置了spring.jpa.hi ...

最新文章

  1. silverlight控件打印预览
  2. ArcGIS时态数据应用——动态展示3个月内犯罪案件数量变化
  3. java多线程创建runnable_Java线程池和runnables创建runnables
  4. 【首创】完美解决scrollview与menu的兼容问题
  5. python获取列表序号_确定列表中的序列号(Python)
  6. 企业运维经典面试题汇总(3)
  7. 小米9 -MIUI12.5稳定版卡刷包与线刷包-V12.5.3.0.RFACNXM
  8. 论文阅读:《Connectionist Temporal Classification: Labelling Unsegmented Sequence Data with Recurrent Neu》
  9. 国际学术会议-英文演讲稿
  10. 联想m5服务器管理口远程重启,服务器远程管理的两个技巧|R740|SR650|SR550|2288hv5|5270m5|联想存储|联想服务器|戴尔服务器|惠...
  11. 基于PyQt的网站后台工具
  12. Jquery 中 ajaxSubmit使用讲解
  13. Cisco Packet Tracer 4.7.2 连接物理层
  14. 微距摄影昆虫拍摄技巧
  15. 吉首大学第九届"新星杯"大学生程序设计大赛(重现赛)
  16. “对不起,你的离职是我的错!”
  17. 关于超级计算机的英语作文,关于无人驾驶的英文作文
  18. 繁简转换OpenCC,autogb 和 autob5,iconv,python的jianfan包
  19. 001-STM32+Air724UG(4G模组)基本控制篇(阿里云物联网平台)-使用MQTT接入阿里云物联网平台
  20. 面试突击90:过滤器和拦截器有什么区别?

热门文章

  1. HIT Software Construction Review Notes (chapter three)
  2. 如何拍好运动风人像?
  3. 杜工部蜀中离席 [唐] 李商隐
  4. 那些真正有用的经验,都是和高手过招换来的
  5. 互联网,就像一条条丝线一样,将每个个体、每个组织串联在一起
  6. 现在很多人都在网上找富业
  7. 程序控制的对象生命周期
  8. 手机运行内存6G,可是开机一会就变成2个多G了,为什么?
  9. socket地址API
  10. 对string类型字符串操作