OSGi容器是如何能將jar文件中的一些類隱藏掉,而讓另一些類可見呢?這是由於OSGi容器使用Java類加載器來管理類的可見性,OSGi容器爲每一個Bundle建立不一樣的類加載器,所以每一個Bundle能訪問位於下列位置中的類: java
a) 位於Java啓動類路徑下的、全部以Java.*開頭的包中的類; 安全
b) 位於OSGi框架類路徑下的類,一般有一個獨立的類加載器負責加載框架的實現類及關鍵的接口類; 框架
c) 位於Bundle空間中的類,這些類一般包含在與Bundle相關的jar文件中,以及加到這個Bundle中的其它jar包中的類。 接口
d) 導入包中的類,例如,HelloWorld Bundle導入了com.javaworld.sample.service包,所以它能訪問該包中的類。Bundle級別的訪問域是OSGi一個很是強大的功能,例如,它能夠讓您安全地更新HelloServiceImpl.java類,而沒必要擔憂依賴於這個類的代碼受到破壞 容器