我的应用程序有几个包,其中包含JAXB注释的类和服务包,它们负责JAXBContext
的创建。
服务包注册BundleListener
并捕获生命周期事件,但问题是我不知道如何从org.osgi.framework.Bundle
对象检索带注释的类。在MANIFEST.MF
和Bundle.loadClass(..)
中添加带有类的条目将解决我的问题,但通过注释查找类对我来说似乎更明确的解决方案。
你知道我怎样才能找到带注释的类吗?
我想我必须扫描jar
文件的.class
资源
Enumeration<?> classes = bundle.findEntries("/", "*.class", true)
并加载Bundle.loadClass(...)
。你认为这种方法会有性能问题吗?
使用Bundle.findEntries
搜索bundle并不会搜索bundle - classpath。您需要使用新的BundleWiring.listResources
api
看看http://sourceforge.net/projects/extcos/;虽然它的重点是组件扫描,但我认为它可能能够涵盖您的用例。注意,注释在JAXB中是可选的——也就是说,JAXB可以在不加注释的情况下使用类。
我会看一下反射项目。它的收集预先扫描的元数据功能也很有用。