2009-08-25 3 views
1

Apache BeanUtilsのsetPropertyメソッドを使用して、Excelファイルからデータを一般的にインポートしています。パーサーに「列名」と「プロパティ名」のペアのリストを提供し、パーサーは「列名」と一致するExcelフィールドのsetProperty(...、「プロパティ名」など)でプロパティを設定します"いいですが、今は問題があります。addXXX()メソッドで設定されたプロパティがあり、そのクラスを変更できません。 このクラスまたはパーサーを変更せずにこのプロパティを設定するにはどうすればよいですか? 可能ですか? DynaClass、PropertyUtils、またはMethodUtilsでラッパーのようなものを作ることができるので、そのプロパティを設定するときにaddXXメソッドを呼び出しますか?addXXメソッドを使用したBeanUtils

ありがとうございます!

答えて

0

クラスをラップするデコレータBeanクラスを作成し、ラップされたBeanのaddXXX()に委譲するsetXXX()メソッドを提供できます。 cglibやその他のバイトコード計測ライブラリの助けを借りて、ダイナミックプロキシ経由で行うこともできます。

DynaClassの方に行く場合は、開始点としてWrapDynaClassをご覧ください。あなたのメソッドにカスタムPropertyDescriptorを提供するためにそれを拡張する必要があります。しかし、私はこれをやっていません。まず、addXXX()セマンティクスはsetXXX()とはかなり異なる可能性があります。第2に、DynaClass/DynaBeanの内部API全体がちょっと面倒ですが、独自のデコレータクラスを書くことは非常に簡単です。

+0

はい、シンプルなデコレータで問題が解決された場合、なぜWrapDynaClassを使用するのですか?ありがとう! – fmaste

+0

私は以前に行ったように、私はdoceratorを作ったが、インスタンスを作成するときにjava.lang.InstantiationExceptionが発生するようになった。 誰かがなぜ知っていますか? – fmaste

+0

'instantiationException'は、classが抽象クラスまたはインタフェースの場合、またはpublic(または呼び出し側からアクセス可能な)引数のないコンストラクタを持たない場合にスローされます。あなたの問題はおそらく後者です。 – ChssPly76

関連する問題