0
讓我們想象一下我執行以下操作:包含對實現代碼的引用的OSGi導出API是否安全?
public enum ExportAPIForOSGi {
;
public static SpecialObject newSpecialObject() {
return new SpecialObjectImplv1();
}
}
public abstract class SpecialObject {
public abstract String specialMethod(String s);
}
public class SpecialObjectImplv1 extends SpecialObject {
@Override
public String specialMethod(String s) {
return "33" + s;
}
}
每個類都在它自己單獨的文件中聲明。只有ExportAPIForOSGi
和SpecialObject
將被OSGi導出。
我的問題:是否安全導出ExportAPIForOSGi
,因爲它包含對實現代碼的明確引用(即SpecialObjectImplv1
)?實施代碼是否會被暴露?
讓我們想象一下,我在ExportAPIForOSGi
而不是v1中使用SpecialObjectImplv2
?這會成爲一個問題嗎?
好的,所以如果你理解得很好,那只是公開的,公開簽名中出現的重要的東西,對嗎?如果我100%確定實現代碼沒有出現在公開聲明的任何內容中(但可以在類文件中使用),那麼我是安全的,正確的? – JVerstry 2011-05-28 03:41:44
對不起,我忘了加入@來通知你。 – JVerstry 2011-05-28 04:02:54
@JVersty,你應該只導出你不打算改變的接口/ API。這使您可以自由更改實施。如果更改任何導出的類,則必須卸載使用該模塊的每個模塊。 – 2011-05-28 07:16:16