0

既存のクラスメソッドをフックして、ある種のロギングを行う必要があります。クラスは、アプリケーションでJarsとして作成および配置されます。私のシナリオの典型的な例は次のとおりです。

  1. 接続(java.sql.Connection)を開き、すべてのDB操作が完了したら接続を閉じます。ここで必要なのは、Connection.close()メソッドを呼び出すたびにカスタムメソッドを呼び出すことです。このためのコード変更は既存のプロジェクトで非常に大きくなるため、接続のカスタムクラスを作成できませんでした。

Closeメソッドをフックする方法はありますか?Javaでメソッドをフックすることは可能ですか?

どんな助けでも大歓迎です。ありがとう。

4

1 に答える 1

0

いくつかの方法があります。

  • が呼び出されjava.lang.reflect.Proxyたときに、InvocationHandlerを使用して追加の処理を実行させますclose()
  • 拡張ラッパーを作成しますConnection(すべてのメソッドを自分で実装し、それらを含まれている接続にリンクする必要があることを除いて、基本的にプロキシと同じです)
  • 私はこれを使ったことがありませんが、AspectJではポイントカットを使用して動作を追加できると思います
于 2012-10-22T14:01:46.163 に答える