回答
鑑於一個類由類名和加載該類的類加載器唯一標識的事實,parent
和child1
必須由bundle_1
的類加載器加載。 child2
將由bundle_2
的類加載器加載。
在OSGi中,每個bundle都有一個ClassLoader。加載類時,ClassLoader將首先查看該包的Import-Package語句。如果類來自導入的包,則將加載委託給提供該包的包的ClassLoader。如果沒有這些匹配,那麼捆綁將嘗試從它自己的類中加載類。 (這是簡化了一點,但應該足夠你的情況)。
所以父類和child1類將由bundle_1的ClassLoader加載,並且child2將由bundle_2的ClassLoader加載。
還有一件事要記住。 Java中的每個類都存儲在「class」.getClassLoader()中創建此類的ClassLoader。所以這可以讓你輕鬆檢查真正發生的事情。只需實例化child1和child2並打印ClassLoaders。
與此相關的另一件事是,如果您在類A的代碼中使用新的「Classname」(),那麼這將觸發加載類A的ClassLoader(當然可以委派它)。
父類是否會加載兩次? – gstackoverflow 2014-09-24 19:05:08
否。當類加載委派時,bundle1的類加載器將知道它已經加載了父類。 – 2014-09-25 16:43:52
- 1. C# - 加載繼承類
- 2. 如何使用繼承類的實例加載繼承對象?
- 3. objc_getClass:加載swift類繼承NSObject
- 4. 方法重載和類繼承
- 5. JMSSerializer和繼承類
- 6. 類繼承和DI
- 7. OSGi和JNI的類加載問題
- 8. OSGi Felix和BndTools - 按名稱加載類
- 9. 繼承和延遲加載NHibernate的
- 10. C++繼承和動態庫加載
- 11. 自動加載路徑和STI繼承
- 12. OSGi類加載器問題
- 13. 繼承和類內的類
- 14. 導入類和繼承類
- 15. 繼承Python類繼承docstrings
- 16. 繼承,隱藏和重載
- 17. 繼承和方法重載
- 18. 重載函數和繼承
- 19. JPA加入繼承類
- 20. osgi繼承的實現導出
- 21. 其他繼承類中的繼承類
- 22. JAVA:泛型類繼承和泛型類型繼承
- 23. C++模板類和繼承
- 24. 類的繼承和鑄造
- 25. C++泛型類和繼承
- 26. C#嵌套類和繼承
- 27. C++循環繼承和類
- 28. 繼承和類成員
- 29. Java內部類和繼承
- 30. C++繼承和類成員
但child2的超級構造函數將在bundle_1上調用? – gstackoverflow 2014-09-23 17:11:52
您的問題未提供足夠的信息。這些類包含哪些包?捆綁包實際導出和導入了哪些包?另外,調用意味着你正在討論線程。線程不屬於捆綁。 – 2014-09-23 23:10:29
@gstackoverflow:構造函數調用實際上與類加載的關係有限。你需要澄清你的意思「child2的超級構造函數將在bundle_1上調用」還是更好:你首先提出問題的理由。 – 2014-09-24 06:58:55