1

クラスメソッドの間に介在して、オブジェクトを動的に拡張したいと思います。

java.lang.reflect.Proxyについてはすでに知っていますが、実際の介入を行うには制限が多すぎます。

java.lang.reflect.Proxyを使用してJavaクラスメソッドに介入することから、最初の制限は次のとおりです。

(...)メソッドはプロキシクラスのインスタンスを介して呼び出す必要があります。したがって、たとえば、ネストされたメソッド呼び出しはインターセプトされません。

そして最悪のもの:

(...)メソッドは、プロキシされるオブジェクトによって実装されるインターフェイスで定義されている必要があります。インターフェイスを実装していないクラスのインスタンスを介して呼び出すことはできません。

実行時に拡張したいオブジェクトはインターフェイスを実装していません。最悪の場合、オーバーライドする必要のあるメソッドはネストされており、プライベートです。

私はこれがPythonとCでかなり簡単であることを知っています、そして上で引用された記事はそれが可能であるかもしれないと言っています:

このシリーズの次の記事では、これらの制限を克服するためのいくつかの手法について説明します。

残念ながら、この記事を見つけることができません。

4

1 に答える 1

3

CGLIB を使用してみてください:

これは私が数年前に書いたチュートリアルで、CGLIB の非常に簡単な紹介です: CGLIB intro

さらにパワーが必要な場合は、AspectJの使用を検討してください

お役に立てれば

于 2012-01-30T09:10:41.557 に答える