2011-01-13 6 views
3

これは、イントロスペクションを使用して2つの単純な、フラットのJava Beanをマージするのは簡単です:ツール

BeanInfo info = Introspector.getBeanInfo(ContactBean.class); 
    PropertyDescriptor pDescArr[] = info.getPropertyDescriptors(); 
    for(PropertyDescriptor pDesc : pDescArr){ 
     //copy properties and check for conflicts here 
    } 

をしかし、それは性質が入れ子になった豆、またはコレクションが含まれている場合はもう少し複雑になります。複雑な豆の深いマージを処理するスマートなツールはどこかありますか?

私は仕事にマージしたいだけの方法についていくつかのより多くの詳細:ソースBeanのコレクション、および空のターゲットBeanを考えると

は、単純なプロパティがない限り、ソースからターゲットにコピーされなければなりません紛争があります。競合がある場合は、フィールドを空のままにしてください。プロパティーがコレクション型の場合は、複製元を​​除いてソースBeanの値を結合し、コピー先のプロパティーにコピーする必要があります。これらのルールは、Bean自体のプロパティに再帰的に適用する必要があります。

+0

Googleには何もないという事実以外にも、ツールは競合の対処方法を決定するために非常に構成可能である必要があります。マージのルールは何ですか? –

+0

@Dave - マージルールの説明を元の質問に追加しました。 – morgancodes

答えて

0

apache common beanutilsを使用できます。あなたがしようとしていることを行う方法はありませんが、その中でヘルパーメソッドを使って同じ結果を得ることができます

2

DozerまたはSmooksです。 Beanのマージが必要な場合は、Dozerが勝者です。 csv to pojoなどの他の用途を探している場合は、Smooksをご覧ください。