我認爲你不應該做註釋掃描,因爲它會減慢啓動速度並且需要大量內存。 JEE應用程序服務器在啓動時進行註釋掃描,以使懶惰的程序員開心,結果非常煩人(例如,掃描JPA或EJB註釋)。
我想你正在實施一種技術,你可以定義規則。我建議你應該定義類似於下列規則:
甚至更好的解決方案可以是使用具有指定屬性的自定義功能名稱空間。例如: -
Provide-Capability: myNamespace;classes=com.foo.myClass1,com.foo.myClass2
在你的技術,你應該寫一個調用BundleTracker:
BundleWiring.getCapabilities("myNamespace");
如果命名空間存在,你可以發現,應該處理的類。
如果您實施了該技術,則可以考慮對Bnd進行擴展以自動填充MANIFEST標頭。這個擴展可以用於比從命令行或像maven這樣的構建工具啓動bnd時。
btw .:您可以使用ASM來解析類字節碼,或者使用Java的內置可能性build up AST。雖然這些可以解決內存問題,但我仍然認爲應該直接在MANIFEST頭中定義類的列表,因爲它使事情變得更加清晰。您可以閱讀MANIFEST標題,您可以檢查webconsole上的功能,但不能對字節碼進行相同操作。
你想用這些帶註釋的類來做什麼? – Aritra
@Aritra我基本上想找到它們,以觸發這些類中使用信息的其他操作。類似的情況可能是基於JAX-RS/JAXB註釋準備Web服務。無論如何這是一個普遍的問題。 – logoff
我一直在過濾要掃描的捆綁包,只從導入註釋包的捆綁包加載類。我正在使用'BundleWiring.getRequiredWires(null)'並使用'BundleWire.getCapability()。getAttributes()。get(BundleRevision.PACKAGE_NAMESPACE).equals(packageName)'查找我的包。它減少了大量的內存消耗和加載類的時間。它似乎不是更好的方法,但它簡化了這個過程。 – logoff