【问题标题】:How to find annotated classes in OSGi bundle如何在 OSGi 包中查找带注释的类
【发布时间】:2012-01-15 16:27:37
【问题描述】:

我的应用程序有几个包,其中包含 JAXB 注释的类和服务包,它们负责创建 JAXBContext

服务包注册BundleListener 并捕获生命周期事件,但问题是我不知道如何从org.osgi.framework.Bundle 对象中检索带注释的类。在MANIFEST.MFBundle.loadClass(..) 中添加带有类的条目将解决我的问题,但通过注释查找类对我来说似乎更清晰的解决方案。

你知道如何找到带注释的类吗?

我想我必须使用

扫描 jar 文件中的 .class 资源
Enumeration<?> classes = bundle.findEntries("/", "*.class", true)

并使用Bundle.loadClass(...) 加载它们。您认为这种方法会出现性能问题吗?

【问题讨论】:

  • 查看关键字“类路径扫描器”,但请注意,在 OSGi 环境中,包确实来来去去。
  • 感谢您的回复。 “类路径扫描器”到底是什么意思?你是说挥手吗?

标签: java jaxb osgi


【解决方案1】:

使用 Bundle.findEntries 搜索包不会搜索 Bundle-Classpath。您需要使用新的BundleWiring.listResources api。

【讨论】:

  • BundleWiring 从 OSGi 版本 4.3 开始。旧版本呢?
  • 对于 4.3 之前的 OSGi 版本,您将需要编写大量代码来自己处理 Bundle-Classpath。
【解决方案2】:

看看http://sourceforge.net/projects/extcos/;虽然它的重点是组件扫描,但我认为它可能能够涵盖您的用例。请注意,注释在 JAXB 中是可选的 - 也就是说,JAXB 可以使用一个类而无需进行注释。

【讨论】:

    【解决方案3】:

    我会看看reflections project。它的collect pre scanned metadata 功能也很有用。

    【讨论】:

      猜你喜欢
      • 2013-10-07
      • 1970-01-01
      • 1970-01-01
      • 2010-10-26
      • 2020-07-25
      • 2013-03-23
      • 2019-05-21
      • 2012-10-21
      • 1970-01-01
      相关资源
      最近更新 更多