Java代碼生成的主要框架是什麼?Java代碼生成
我不是在尋找一個數據庫或應用程序生成工具。我有一個類的骨架,我需要爲不同的用例生成不同的動態部分。該類的大部分是相同的,因此我想運行生成不同風格類的代碼。
任何人都知道一個好的框架?
謝謝。
Java代碼生成的主要框架是什麼?Java代碼生成
我不是在尋找一個數據庫或應用程序生成工具。我有一個類的骨架,我需要爲不同的用例生成不同的動態部分。該類的大部分是相同的,因此我想運行生成不同風格類的代碼。
任何人都知道一個好的框架?
謝謝。
cglib由JUnit/EasyMock使用,因此可能已經包含在用戶項目中 – 2010-08-04 06:24:05
注意,這些工具主要是通過生成樣板代碼kickstart系統項目。
SQL2Java從數據庫模式生成數據庫CRUD代碼。
[SQL2JAVA]是一個很好的工具。它生成數據庫模式的所有[CRUD]代碼。它的連接池不夠好,你可以定製它的Manager類來維護你自己的池。
除此之外,如果你有興趣與驅動開發(MDD)模型時,可以使用[AndroMDA的]或[Borland的共同],最好[日食]基於工具的一個在那裏。
如果您有興趣進一步研究代碼生成並進入模型驅動的軟件開發,您應該看看[openArchitectureWare]。支持代碼生成
其他Java開發工具[龍目]和[勺。龍目島項目提供了諸如自動生成默認getter/setter方法,自動資源管理(使用@Cleanup註釋)和註解驅動異常處理等功能。
[CGLIB],[Velocity模板]和[AppFuse的]也很大。
** [爲什麼] **是否將** [方括號] **放在** [東西] **周圍? :) – 2012-09-09 14:45:29
我推測ASM是最流行的Java字節碼生成庫。它是最底層的字節碼庫,但還有其他更高級的代碼生成庫建立在ASM上,儘管直接使用ASM也不是太困難(直接使用的一個好處是ASM的JAR大小非常大小)。一些ASM的用戶在http://asm.ow2.org/users.html
編輯提到:
有關更新的問題,其中提到的用例(「我有一個類的骨架,我需要生成它不同的使用情況下不同的動態部分「),我的答案是改進設計,以便刪除所有代碼重複並且不需要代碼生成。閱讀不同的設計模式可以給出一些關於如何去做的想法。對於更具體的答案,您需要顯示一些代碼並更加具體地瞭解您的需求。
但是從編程的角度來看,它是一個PITA,從某種意義上說,生成源在某種意義上更容易。 – 2010-08-02 09:21:45
取決於你需要做什麼。字節碼生成也可以在運行時完成,它可以用來修改現有的類,所以它生成源文件更強大。 – 2010-08-02 19:56:01
這個問題是關於代碼生成的;不編譯。 ASM的要求太低了。 – Recurse 2010-08-06 04:49:05
我用德魯伊數據庫管理器:http://druid.sourceforge.net/
它從數據庫開始,可以進行逆向工程,而且它可以生成基於表和字段的文件,SQL類和文件。
使用的模板語言是速度。
該軟件可通過插件系統進行擴展。
AtomWeaver http://www.atomweaver.com現在處於公開測試版。這是一個代碼生成IDE,可以與當前的IDE一起使用(因此,它不是框架,而是獨立的應用程序)。有了它,你可以生成樣板代碼,但也是一個完整的項目。 AtomWeaver實現了ABSE(基於原子的軟件工程),這是一種模型驅動的軟件開發形式(與UML或MDA無關)。
它本質上是一個基於模板的系統。
AndroMDA的(發音:仙女座)是一個開放的源代碼生成的框架下面的模型驅動架構(MDA)的範例。它從CASE工具獲取模型並生成完全可部署的應用程序和其他組件。
我已經使用它,它是非常強大的。它不僅從UML生成配置文件和代碼,而僅僅是爲開發人員實現開發的業務方法,還通過使用衆所周知的dessing模式來維護生成代碼。
嘗試Xtext(http://www.eclipse.org/Xtext/)。您使用XText來定義DSL,XText將生成支持此DSL的Eclipse編輯器。然後你可以使用XP和定義模板來生成所有類型的文本(例如java源代碼)。
對Velocity模板引擎的另一投票。我已經在多個項目中使用過它,用於生成EJB2.1樣板代碼,數據庫對象等等。它很好用,而且很容易學習。
你需要做什麼? – 2010-08-02 06:40:34
http://c2.com/cgi/wiki?CodeGenerationIsaDesignSmell – oluies 2010-08-02 06:42:29
你是想做一些特定的事情,還是隻是收集另一個框架列表的方式? – skaffman 2010-08-02 07:06:18