1.リフレクションとは何ですか?
私はインターネットでの反省について非常に人気のある説明を覚えています:
Javaは大きな美しさですが、大きな女性には許されないことがたくさんあります。反射神経とは、銃を手に持って銃を構えることです。大きな美しさでやりたいことは何でもできます。オフ。
通常の説明:Javaのリフレクションは、プログラムが実行時にオブジェクトのすべての情報を取得できることを意味します。これは、オブジェクト情報を動的に取得し、オブジェクトを動的に呼び出す方法です。最も一般的なシナリオは、動的プロキシです。最も広く使用されている動的プロキシは、Springなどのさまざまなフレームワークです。
2.リフレクションの内容と適用
2.1クラスオブジェクト
リフレクションは、Classオブジェクトから分離できない必要があります。コードを記述した後、.classファイルにコンパイルする必要があることは誰もが知っています。ここでの各.classファイルは、仮想マシンによってメモリにロードされた後、Classオブジェクトとして存在します。クラスは1つの.classファイルしか持つことができません。したがって、クラスはClassオブジェクトに対応し、Classオブジェクトはの記述情報です。クラス。例:フィールド、メソッド、注釈など。クラス構造を取得する限り、彼はClassオブジェクトに反映され、Classオブジェクトを介して取得できます。
总结:class
(include )interface
の本質はデータ型( Type
)です
String
クラスを例にとると、JVMはString
クラスをロードするときに、最初String.class
にファイルをメモリに読み込み、次にクラスのインスタンスをString
作成して関連付けます。Class
Class cls = new Class(String);
JVMは、ロードされたインスタンスごとclass
に対応するインスタンスを作成し、クラス名、パッケージ名、親クラス、実装されたインターフェイス、すべてのメソッド、フィールドなどを含むすべての情報をClass
インスタンスに保存class
するため、特定のインスタンス、このインスタンスを介してインスタンスに対応するすべての情報を取得Class
できます。Class
class
Class
インスタンスを介して情報を取得するこの方法はclass
、リフレクションと呼ばれます。
class
1つのインスタンスを取得する方法はClass
?3つの方法があります:
(1)
class
静的変数を介して直接取得しますclass
:
Class cls = String.class;
(2)
getClass()
インスタンス変数がある場合は、インスタンス変数によって提供されるメソッドを介して取得できます。
String s = "Hello";
Class cls = s.getClass();
(3)
1つの完全なクラス名がわかっている場合はclass
、静的メソッドを使用して取得できますClass.forName()
。
Class cls = Class.forName("java.lang.String");
具体的な理解:クラス-LiaoXuefengの公式ウェブサイト
2.2プロキシ
動的プロキシは、実際には、JVMが実行時にクラスバイトコードを動的に作成してロードするプロセスです。
その後の追加...