2011-06-30 14 views
1

私は現在Seasar2 Frameworkを使用しています。このフレームワークは日本では非常に一般的ですが、英語の文書を見つける際に問題があります。公式英語翻訳サイトでさえ、彼らは、フレームワークが依存性注入とAOPを使用することについて議論するだけです。Javaインタフェースのコンテンツを変更するためにAOPはどのように実装されていますか?

私は、コンポーネントS2Daoのいずれかでそれを使用する方法に興味を持っていました。基本的にはインターフェイスDAOクラスとフレームワークを自動的に作成するだけで、実行時にコードが変更され、途中で呼び出される中間クラスが作成されます。したがって、DBトランザクションコードは自動的にクラスに追加されます。私は、これがどのように行われたかについて説明するステップがあるのだろうかと疑問に思っていました。 Javaは実行時にコードを変更し、実行時にメソッドを変更できますか?

これはどのように行われましたか?私はちょうどフレームワークがこれをやっている方法を知りたい。

答えて

5

はい、実行時にインターフェイスを動的に実装したり、コンパイル済みのバイトコードを操作したりすることは可能です。

Javaには、実行時にdynamic proxy classesと呼ばれるインターフェイスを実装するための組み込みのメカニズムが用意されています。

あなたがインターフェイスを実装するために、だけでなく、クラスを拡張すると(例えば、メソッドの動作を変更するために)実行時にバイトコードを操作するだけでなく、許可cglibまたはjavassistような良い図書館もあります。 SpringやHibernateのようなフレームワークは、というマジックをにするためにこれらのライブラリを使用しているので、あなたのフレームワークもこれらのいくつかを使用しているかもしれません。

注:これらのライブラリは、JVMのデフォルトのClassLoaderを使用する代わりに独自のClassLoaderを使用してクラスをロードするため、バイトコードを "調整"することができます。ロードされたクラス、彼らは彼らが望むものを何でもすることができます:)。

関連する問題