ホームページ  >  記事  >  ウェブフロントエンド  >  【動的ページ】 (2) Javareflection_html/css_WEB-ITnose

【動的ページ】 (2) Javareflection_html/css_WEB-ITnose

WBOY
WBOYオリジナル
2016-06-24 11:48:13943ブラウズ

Java のリフレクション メカニズムは Java 言語の非常に重要な機能です。まず、Sun の公式 Web サイトを見て、公式 Web サイトがリフレクション メカニズムをどのように定義しているかを見てみましょう。


ざっくり訳してみます、あまり正確ではないかもしれません。リフレクションは Java プログラミング言語の機能であり、Java プログラムの実行時にチェックまたは自己チェックを行い、内部プロパティを操作する必要があります。たとえば、Java クラスが独自のメンバー名をすべて取得して表示できるようになります。 Java クラス内から検査および操作できる機能は人気がないように聞こえるかもしれませんが、この機能は他のプログラミング言語には存在しません。たとえば、Pascla、C、または C# プログラムでは、そのプログラム内で定義された関数を取得する方法がありません。リフレクションのもう 1 つの実際の例は JavaBeans です。JavaBeans では、コンストラクターを通じてソフトウェア コンポーネントを操作できます。 Java プロパティ (クラス) は動的にロードされるため、このコンストラクターはリフレクションを使用して Java プロパティ (クラス) を取得します。

つまり、Java のリフレクション機構を簡単に理解すると、実行状態では、どのクラスもそのクラスのプロパティとメソッドを動的に取得でき、どのオブジェクトもそのクラスのメソッドを呼び出すことができます。この動的に情報を取得し、オブジェクトのメソッドを動的に呼び出す機能をJavaのリフレクション機構と呼びますが、この機構は他のプログラミング言語にはないJava言語独自の機構です。

現在、多くのオープンソース フレームワークは Hibernate や Struts などのリフレクション メカニズムを使用しており、これらはすべてリフレクション メカニズムを使用して実装されています。しかし、なぜ反射メカニズムを使用するのでしょうか?以前にコンパイル時にクラスやオブジェクトなどの型を決定し、ハードコーディングして固定し、そのオブジェクトをインスタンス化するか、このメソッドを呼び出しました。このメソッドは静的と呼ばれます。コンパイル。これに対応するのが動的コンパイルです。これは、このブログで説明する Java リフレクションです。その実装原理は、実行時に型を決定してからオブジェクトをバインドすることです。この動的なコンパイル機能は、Java 言語の能力を最大化し、Java の柔軟性を強化し、ポリモーフィック アプリケーションを具体化します。

上記の内容がまだ理解できない場合は、別の方法を試してください。 Java のリフレクションとは、プログラムが実行中に独自の情報を取得できることを意味します。Java では、クラスの名前が指定されていれば、そのクラスのすべての情報がリフレクション メカニズムを通じて取得できます。 OA で使用するリフレクション メカニズムについて考えてみましょう。Role、Apartment、User のいずれのエンティティが渡されるかわからないため、Java のリフレクション メカニズム Class を使用し、そのときのシーンを注意深く思い出します。つまり、Role、Apartment、User という 3 つのテーブルがあり、各テーブルには追加、削除、変更、確認という 4 つの操作があります。これまで Java リフレクション メカニズムを理解していなかった場合は、それに基づいてさまざまな Dao クラスを作成する必要があるかもしれません。異なるテーブルを使用するには、上記で行ったように、3 つの Dao クラスを作成する必要があります。これらのクラスは多くの同じメソッドを繰り返しますが、クラス名は異なります。

Java のリフレクション メカニズムができたので、古いサークルから抜け出す必要があります。人間の賢さを考えると、ツールを開発し、継続的な改善を通じて高い再利用性と効率性を実現する方法を考えるだけで十分です。そこで、Java のリフレクション メカニズムを使用して Dao クラスのみを作成し、そのクラスに追加、削除、変更、チェックインするメソッドを記述します。ただし、型は空のままにしておきます。その後、操作するにはさまざまなタイプのオブジェクトを渡すだけで済みます。多くのテーブルを作成する必要はありません。Dao クラスを作成しても、リフレクション メカニズムが自動的にこれを実行します。ワインセラーに 3 つのワインタンクがあり、それぞれ青ワイン、緑ワイン、黄色ワインが入っているようなものです。ワインセラーのオーナーは、毎日ドアにワインタンクのようなものを置き、ワインを販売しています。以前の習慣は、たとえば、今日青いワインを売る場合は、青いワインの瓶を持ってきて玄関に置き、緑のワインを買う場合は、緑のワインの瓶を玄関に移動するというものでした。その後、ある男がアイデアを思いつきました。それは、空のワインタンクをドアのところに置き、そこに蛇口を付けるというものでした。今日ワインを売りたい場合は、ドアのところにあるワインタンクにワインを注ぐだけです。ワインタンクを前後に運ぶ必要はありません。はは、なんてバカな上司なんだろう。 もちろん、この話は Java のリフレクション機構を説明するためだけに作ったものです。 振り返ってみると、Java のリフレクション機構は動的なオブジェクトの作成とコンパイルを実現します。より深く理解するために、別の例を作成してみましょう。今、私はクラスの先生で、シャオホンは床の掃除を担当し、シャオヘイは黒板を掃除するのを担当しています。自分の仕事だけを担当します。掃除するには、Xiaohong に床を掃除してもらうように手配することを覚えておく必要があります...


でも、この仕事の割り当ては非常に非効率的です。固定の人を誰に配置するか考えなければなりません。そこで、Java リフレクション メカニズムを使用して、これまでの作業の配置方法を変更しました。


このように、Java のリフレクション機構を使用すると、どのオブジェクトを新しく作成してどのような処理を実行するかがわかりません。今では、Java のリフレクション機構を使用して、オブジェクトを動的に作成し、対応する処理を実行します。次に、そのメソッドとプロパティのいずれかを呼び出して、その機能を実行します。 Java のリフレクションの仕組みをこのように理解しているかどうかはわかりませんが、次回はJavaのリフレクション機構を利用してJarパッケージのクラス名と属性を読み取る方法を紹介しますので、ご期待ください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。