2

几年来我一直在使用 c3p0 和休眠。在查看异常堆栈跟踪时,我会看到com.mchange.v2.c3p0.impl.NewProxyPreparedStatement堆栈中的类。我去寻找这些类的源代码并遇到了好奇的com.mchange.v2.c3p0.codegen包。

特别是,看起来JdbcProxyGenerator是 Java 中的元编程。我很难理解代码生成机制以及使用它的原因。构建的 jar 包含这些生成的类,所以我假设这些类是在构建过程中构建的,可能是两阶段构建的一部分。codegen 包似乎不在生成的 jar 中。

出于我自己的好奇心,任何见解都会受到赞赏。谢谢!

4

1 回答 1

3

是的,你是完全正确的。

c3p0 使用代码生成来生成大型 JDBC 接口的非反射代理实现、具有大量属性的“java bean”类以及一些包含调试和日志标志的类(在构建中设置条件编译)。

您总是可以通过在源代码分发中键入 ant codegen 来查看生成的类,然后查看 build/codebase 目录。c3p0 (0.9.2-pre2) 的最新二进制发行版在 src.jar 文件中包含生成的源代码,您也可以在http://repo1.maven.org/maven2/com/mchange/上找到它作为 maven 工件c3p0/0.9.2-pre2-RELEASE/c3p0-0.9.2-pre2-RELEASE-sources.jar

我希望这有帮助!


于 2012-06-08T22:54:46.557 回答