定義:
反射実行時間は、のために任意のクラス、このクラスのすべてのプロパティとメソッドを知ることができます。のために任意のオブジェクト、ことができます呼び出すためにそのメソッドのいずれかを。Javaでは、単に特定のクラスに名前を付けるために、あなたはリフレクション経由クラスにすべての情報を得ることができます。
特徴:
いずれかのオブジェクトの実行時に解析クラスが属する、実行時にオブジェクトを作成し、それを実行時に有する任意のクラスのメンバ変数とメソッドを判定し、実行時に任意のオブジェクトのメソッド呼び出しを、動的プロキシを生成します。
どこ?
コードの行でJDBC:Class.forNameの(「com.mysql.jdbc.Driver.class」);ドライバクラスMySQLをロードします。
Strutsのは、反射によって達成され、そこ休止。
実装:
Javaでは、最も重要なステップを実現するための反射は、最初のステップは、Classオブジェクトを取得することで、あなたはクラスのプロパティ、メソッド、およびこのクラス呼び出しのメソッドを取得するために、オブジェクトに対応する方法によって得られたClassオブジェクトを呼び出すことができます。
クラス4()メソッドで得ることができます。
1)Class.forNameの( "クラスパス")。
2)クラス名に.Class
3)オブジェクト名.getClass()
4)包装の基本的なタイプの場合は、クラスオブジェクトは、包装ラッパークラスタイププロパティを呼び出すことによって得ることができます。
たとえば、次のように、<?>クラスclazz = Integer.TYPEの
Java実装クラスは、反射しました:
1)クラス:それは、Javaアプリケーションがで実行されているクラスおよびインタフェースを表し、
2)ファイルされる:クラスまたはインタフェース、およびそれへの動的アクセスの性質に関する情報を提供します。
3)構造:シングルクラスのコンストラクタのアクセス権についての情報を提供します
4)方法:メソッドのクラスまたはインタフェースに関する情報を提供
注意:これを達成するために必要とされる:クラスJavaクラスは、クラスの最も重要な機能に反映され、すべてのオブジェクトが(メソッド、プロパティ、コンストラクタ、アクセス権を含む)の情報を取得しました。
長所と短所のリフレクション:
利点:
1)することができる動的に大きく、クラスランタイムのインスタンスを取得プログラムの柔軟性を高めます。
2)とJava 動的コンパイラの組み合わせは非常に強力な達成することができます。
短所:
1)反射使用して低い性能を。Javaのリフレクションは、バイトコード、メモリ内の分析対象物を解析します。
ソリューション:
- JDKセキュリティチェック時間がかかるのでによってように、(真)setAccessibleセキュリティチェック方式をオフにする(改質制御を確認するためのアクセスをキャンセル反射率を高めるために)。
- はるかに高速一切キャッシュを書いていないよりも書き込みのキャッシュがある場合に、動的に、クラスのインスタンスを作成するために必要な回数。
- ReflectASMツールによって、バイトコード生成の仕方反射体の速度を加速します。
2)反射を使用すると、比較的安全ではありません、ブレークカプセル化するクラス、メソッドとプロパティは、反射によって民間このクラスを取得することができます。