OSGi的聲明式服務被明確地允許有一個綁定方法,無需爲基準的匹配解除綁定的方法,因爲「一旦組件配置被停用時,SCR必須拋棄到的所有參考文獻組件實例和與激活關聯的組件上下文「。OSGi的DS:省略解除綁定的方法與Felix SCR @Reference註釋
我使用Apache Maven的費利克斯-SCR-插件生成從Java5的註解我的服務組件XML。如果我忽略從@Reference標註了「取消綁定」屬性,然後我得到這個故障:
[ERROR] @Reference: Missing method unbind for reference configuration at Java annotations in <classname>:<linenum>
爲什麼SCR發電機這麼嚴格?有沒有辦法讓它容忍一個省略的解除綁定方法?也許我需要向Felix提出缺陷?
當然,它會很容易,只是微不足道的解除綁定方法添加到我的服務,但該規範說,他們是不需要的。
有趣的,所以「必須被稱爲」說,解除綁定方法實際上是必需的?我的理解是,無論如何這個服務實例將被拋棄,所以如果引用不被忽略就沒有什麼大不了的。但似乎可能是不正確的。 –
由於服務實例沒有被代理,所以放棄它的唯一方法是將其歸零。在卸載捆綁包的情況下,捆綁包的類加載器加載的類的所有實例都必須爲無效狀態,以確保整個捆綁包(類加載器,所有類和實例)都被垃圾收集。 – earcam
@Chris,只是修改插件 - 有一個配置選項「generateAccessors」 - 我還沒有嘗試過,但猜測如果你設置爲true,它會爲你生成un/bind方法。 – earcam