2011-08-18 36 views
0

問題: 應用程序使用某些庫。如:Java爲庫類添加新函數

ClassA a=new ClassA(); 

在此庫中,classA使用classB - 例如,從classB調用一些方法。 我需要改變這種方法的工作方式。 有沒有可能不使用AOP? 謝謝。

+0

您需要爲您的問題添加更多詳細信息。它沒有任何意義。 – Mitch

回答

2

有兩種選擇:

一)修改源
二)修改字節碼

a)指:下載源代碼,更改它,建造和使用自己的版本。缺點:對於庫的每個新版本,都需要創建一個新的補丁版本

b)爲此,AOP(可能使用AspectJ)是最簡單的方法。其他選項是使用commons/bcelcglib以編程方式執行此操作。 AOP比較容易,因爲你只需要實現你想要的行爲,而使用字節碼操作,你還需要做大量的基礎設施編程(例如提供一個定製的ClassLoader或運行你的補丁的Java代理)。

備選c)通常是最好的:聯繫圖書館的開發人員,並要求他提供您需要的功能。

1

如果ClassA不是最終的,則可以繼承ClassA。您應該下載該庫的源代碼並查看內部結構以瞭解其工作原理 - 僅創建一個子類作爲最後的手段 - 您不想破壞該庫。