我一直在使用c3p0和hibernate一起使用了几年。查看异常堆栈跟踪时,我在堆栈中看到了诸如com.mchange.v2.c3p0.impl.NewProxyPreparedStatement
之类的类。我去寻找这些类的源代码,并遇到了curous com.mchange.v2.c3p0.codegen
包。
特别是,JdbcProxyGenerator似乎是Java中的元编程。我很难理解codegen机制及其使用原因。构建的jar包含这些生成的类,所以我假设这些类是在构建期间构建的,可能是两阶段构建的一部分。 codegen包似乎不在生成的jar中。
任何见解都会受到赞赏,仅仅是为了我自己的好奇心。谢谢!
答案 0 :(得分:3)
c3p0使用代码生成来生成大型JDBC接口的非反射代理实现,具有许多属性的“java bean”类,以及一些包含调试和日志标记的类(用于在构建中设置条件编译)。
您始终可以通过在源代码分发中键入ant codegen,然后查看build / codebase目录来查看生成的类。 c3p0(0.9.2-pre2)的最新二进制分发包括src.jar文件中生成的源,您也可以在http://repo1.maven.org/maven2/com/mchange/c3p0/0.9.2-pre2-RELEASE/c3p0-0.9.2-pre2-RELEASE-sources.jar找到maven工件
我希望这有帮助!