2011-09-15 161 views
1

我加載某些類從一個位置(用我自己的類加載器)和我的應用程序用戶可以將其jar文件添加到這個位置,我會加載所有存在於那些罐子files.It類是像一些運行插件特定type.Then類我把這些文字類中的對象的HashMap(這是一類特殊的領域),並創建實例從那裏每當required.If一些文字類從該HashMap中刪除,那麼沒有人應能夠創建該類的實例 - 類似於類應該爲正在添加類的用戶卸載。 2)我也希望我的用戶不應該使用我的hashMAp操作所有我已經加載的類文字操作的任何代碼。Java反射

回答

0

我還沒有與反射適當的經驗,但我的建議是:含實例所有實例的記錄

有一個類(LoadedClassesManager,說)。它也應該實現可觀察模式(即響應事件監聽器)。

要具有加載的類的實例都通過在LoadedClassManager一個方法調用(類似getNewInstance(Class clazz, params))被調用。該方法還會將調用對象註冊爲偵聽器(用於類被卸載時)。

所以當某個類被卸載時,事件偵聽器,即使處理程序將被LoadedClassesManager被要求妥善處理類的卸載。

+0

Thnx的答覆。 但是,我在這裏有兩個問題。 1)是否可以卸載使用代碼的類(從內存中卸載或者我只能設置一些fiels來標記它unlodeed) 2)由於我的代碼是開放的,以我的所有用戶,以便他們也可以使用我的LoadedClassManager中的類他們正在添加到我的應用程序中。我也想阻止這一點。 – Chandan

+0

在這裏看到關於你的第一個擔憂的答案:http://stackoverflow.com/questions/148681/unloading-classes-in-java – WaelJ

+0

關於你的第二點,我不太明白你的意思。你的代碼是開放的,因爲你的用戶可以修改他的源代碼? – WaelJ