簡體   English   中英

在運行時擴展類

[英]Extending class at runtime

因此,對於這個項目,我試圖在運行時擴展一個類。 我想知道的是,這可能嗎? 如果是這樣,我該怎么辦? 是否有用於這些目的的庫?

CGLib是您要查找的庫。 它在運行時擴展類或實現接口方面非常強大,因此許多流行的框架(如Spring或Hibernate)都使用它。

您可以使用以下代碼創建類擴展

 public Object createProxy(Class targetClass) {
    Enhancer enhancer = new Enhancer();
    enhancer.setSuperclass(targetClass);
    enhancer.setCallback(NoOp.INSTANCE);
    return enhancer.create();
   }

盡管您可能會使用具有所需邏輯的有用的方法攔截器替換NoOp回調。

是的,可以在運行時擴展類。 嘗試一個能夠在運行時修改字節碼的庫,例如javassistASM

答案取決於您對“擴展課程”的意思。 在Java中,“ extend”意味着聲明另一個擴展第一個類的類(是子類)。 因此,如果要創建給定類的子類,則可以-只需准備一個表示該子類的字節數組,然后將其傳遞給類加載器即可。

如果要向現有類添加字段或方法,則只有在加載此類時才可以這樣做,並且可以通過替換字節數組表示形式來完成。 如果已經加載了類,則無法以任何方式對其進行修改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM