4

在我目前正在開發的一個項目中,我需要在運行時生成Java類。 我還需要避免在稍後使用這些類時使用反射。Javassist Vs. Java編譯器API

我一直在尋找當前的解決方案來做到這一點,並找到了Javassist和Java 6 Java編譯器API。

我很困惑,但:

  1. 是什麼Javassist是用來生成 類?它使用反射或 的東西?

  2. 我編寫一些測試,發現它 很容易從源代碼生成字節碼 ,然後從生成的字節碼加載 類。 使用 Javassist優於此解決方案的優點是什麼?

回答

6

Javassist是有幾種選擇,一個是小附帶的編譯器讓您的Java代碼片段轉換爲字節碼,因此很容易插入例如現有類中的「System.out.println(....)」或「log.debug(...)」語句。

我在這篇文章中寫了一篇文章,它展示瞭如何完成它。見http://blogs.oracle.com/CoreJavaTechTips/entry/add_logging_at_class_load。注意:對於生產環境不應該使用這種方法 - 那麼你應該考慮在應用程序中使用面向方面編程。

+0

在這種情況下,我不需要進行類轉換。你仍然認爲Javassist更好嗎?或者說,我去哪裏並不重要? – halfwarp 2010-08-03 15:26:58

+0

取決於你需要做什麼。隨意爲您的問題添加用例。 – 2010-08-03 15:47:07

+0

這只是一個簡單的算術表達式評估方法,避免使用反射或類似訪客模式... – halfwarp 2010-08-04 09:42:10