2

私は2、3年の間hibernateでc3p0を使用しています。例外スタックトレースを見るcom.mchange.v2.c3p0.impl.NewProxyPreparedStatementと、スタック内などのクラスが表示されます。com.mchange.v2.c3p0.codegen私はこれらのクラスのソースコードを探しに行き、curousパッケージ に出くわしました。

特に、JdbcProxyGeneratorはJavaでメタプログラミングしているようです。codegenのメカニズムとそれが使用される理由を理解するのに苦労しています。ビルドされたjarにはこれらの生成されたクラスが含まれているため、これらのクラスはビルド中に、おそらく2フェーズビルドの一部としてビルドされると想定しています。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 に答える