0

とにかくJavaBeanにデータを入力できるかどうか知っていますが、リフレクションを使用したくありません。

たとえば、このxmlテンプレートを使用して入力します

サンプル XML ファイル

<property name = "card" value = "cdd"/>

public class Customer {
    private String card;

     public void setCard(String card) {
          this.card = card;
     }

     public String getCard() {
     }

}

Java Bean で setCard を呼び出したいのですが、リフレクションを以前に使用したことがあり、非常に遅いため、リフレクションは使用したくありません。

代替手段はありますか?たとえば、Hibernateはどのようにそれを行いますか?

ありがとうカルロ

4

3 に答える 3

1

XML から JavaBean を設定するための唯一の高速な (つまり、リフレクションを使用するよりも高速な) 方法は、XML から (この場合は XML 属性から) 抽出された値でセッターを呼び出すバインディング コードを作成または生成することです。

  • バインド コードを手書きするのが最も簡単な方法です。書くことがあまりない場合は。

  • ソース コードとしてコードを生成し、コンパイルすることができます。

  • コードは、BCEL や ASM などのバイトコード生成テクノロジを使用して生成できます。

  • 既存のバインディングはコード生成ではなくリフレクションを使用する可能性がありますが、既存の XML-to-JavaBean バインディング ジェネレーターが存在する可能性があります。


しかし、これがあえてリフレクションを避ける価値があるかどうかは明らかではありません。リフレクションは比較的コストがかかりますが、XML はおそらくかなり高価です。より複雑な実装アプローチを使用することを決定する前に、プロファイリングを行うことをお勧めします。

于 2011-04-03T13:48:56.177 に答える
0

Hibernate は内部でリフレクション API を使用していると確信しています。Groovy には、Bean の getter/setter を自動的に生成して使用するための優れたサポートもあり、最終的にはフードの下でリフレクションも使用します。

現在、パーサーをハードコーディングして xml を読み取り、name 属性を指定して適切なセッターを呼び出すことができるオプションがありますが、パーサーが脆弱になるという問題に遭遇します (それが理にかなっている場合にモデルが変更された場合)。

于 2011-04-03T12:58:02.553 に答える
0

Bean があなたのものである場合、次のようなインターフェースを実装できます。

/** Tries to set the property named key with the value given and returns true for success or false otherwise. */
boolean set(String key, Object value);

次に、単にそのインターフェイスにキャストし、そのメソッドを使用してプロパティを設定してみます。確かに Bean で何らかの作業が必要ですが、リフレクションは回避されます。

于 2011-04-03T12:59:21.103 に答える