簡體   English   中英

OSGI DS:聲明式服務無需 xml 文件即可工作

[英]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 包的原因。 但是,一切正常,所有捆綁包都已解決。

所以問題——

  1. 為什么 DS 服務可以在沒有 xml 文件的情況下工作?
  2. 為什么我的 osgi 框架不需要org.osgi.service.component.annotations.Component Felix 包有org.osgi.service.component.annotations包,但沒有org.osgi.service.component.annotations.Component注釋。
  1. 如果沒有 xml 文件,DS 將無法工作。

可能您已將其從文件系統中刪除,但並未從部署到 OSGi 框架中的包中刪除。

  1. 這些注釋僅在構建時使用,它們不會創建運行時依賴項。

我必須承認尼爾是對的。 注釋是構建時間。 即使 Felix SCR 的人會做一個妙招並嘗試在運行時執行它,因為注釋具有 CLASS 保留,因此除非他們解析類文件,否則無法用於運行時。

你一定看到了別的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM