[英]OSGI DS: declarative services work without xml file
我正在使用 felix osgi + ds + 焊接 cdi + pax cdi。 所以我有以下服務:
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.ServiceScope;
@Component(
immediate = false,
property={"label=stub"},
scope=ServiceScope.PROTOTYPE
)
public class ServiceImpl implements ServiceI{
@Override
public String getMyString() {
Component t=null;
return "This is my string:"+t;
}
}
要生成 ds.xml 文件,我使用 maven-bundle-plugin,因為我知道這是生成 ds xml 文件的現代方法。 所以一切似乎都有效。 ds xml 文件由 maven 插件生成並放入 OSGI-INF。 我決定檢查如果我刪除這個 ds.xml 文件,felix 會做什么。 所以我刪除了這個xml文件並清理了osgi緩存。 我對結果感到非常驚訝。 該服務仍然有效並成功注入。 我剛收到消息:未找到組件描述符條目“OSGI-INF/....xml”。 此外我認為@Component 注釋在編譯后被刪除。 這就是為什么我沒有在我的 osgi 中安裝 org.osgi.service.component 包的原因。 但是,一切正常,所有捆綁包都已解決。
所以問題——
org.osgi.service.component.annotations.Component
? Felix 包有org.osgi.service.component.annotations
包,但沒有org.osgi.service.component.annotations.Component
注釋。可能您已將其從文件系統中刪除,但並未從部署到 OSGi 框架中的包中刪除。
我必須承認尼爾是對的。 注釋是構建時間。 即使 Felix SCR 的人會做一個妙招並嘗試在運行時執行它,因為注釋具有 CLASS 保留,因此除非他們解析類文件,否則無法用於運行時。
你一定看到了別的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.