4

ドキュメントを読みましたが、DynamicBeanの主な目的の定義はありません。私はこれを実装する方法を理解していますが、なぜこのアプローチがとても良いのかわかりません。

では、Dynamic Beanを使用するのが良い場合、誰かが状況を知ることができますか?

ありがとう

4

2 に答える 2

2

動的Beanを使用すると、通常、明示的なメンバーではない可能性のあるフィールドを取得および設定できます。最も直接的な比較はマップです。マップを使用すると、事前にフィールドを定義しなくてもフィールドを取得および設定できます。ただし、動的Beanは、標準のJavaイディオム(ゲッター/セッター)に準拠しています。

ただし、ハッシュマップとは異なり、dyanbeansは制約をより簡単に適用できます(基礎となるデータ構造の実装を非表示にするため、遅延したり、設定時にデータ接続を確立したりできます...)。たとえば、明示的なゲッターまたはセッターをdynabeanに簡単に追加でき、コードは非常に慣用的に読み取られ、他のBeanAPIとクリーンに相互作用します。

public int getCost()
{ 
    if(this.get("cost")==null)
     return -1;
    return Integer.parseInt(super.get("cost"));
}
于 2011-10-06T16:00:29.227 に答える
2

ATGの動的Beanに関する最も有用な部分は、まだカバーされていないクラスに追加のDynamicPropertyMapperクラスを提供することです。まず、DynamicBeans.setPropertyValue(object、property、value)およびDynamicBeans.getPropertyValue(object、property)静的メソッドを使用して、JavaBeanプロパティに必ずしも対応しないオブジェクトのプロパティを設定または取得できることに注意してください。使用しているオブジェクトが動的Beanに登録されていない場合、デフォルトでJavaBeanプロパティを使用しようとします。リポジトリアイテム(プロパティはリポジトリアイテムのプロパティに対応します。当然、Profileオブジェクトにも適用されます)、DynamoHttpServletRequestオブジェクト(サーブレットパラメータに対応)、マップ/辞書(キーに対応)、

これにさらにクラスを追加するには、DynamicPropertyMapperを拡張するクラスを作成する必要があります。たとえば、HttpSessionのゲッターとセッターへのフォールバックを持つ属性を使用してHttpSessionオブジェクトを同様に機能させたいとします。次に、DynamicPropertyMapperから3つのメソッドを実装します。これを実装するオブジェクトのカスタムBeanInfoまたはDynamicBeanInfoクラスがない場合は、DynamicBeans.getBeanInfo(object)を使用してgetBeanInfo(object)クラスを簡単に実装できます。 。

DynamicPropertyMapperを入手したら、DynamicBeans.registerPropertyMapper(mapper)に登録できます。通常、これは、プロパティマッパーを作成しているクラスの静的初期化ブロックに配置されます。ただし、制御不能な別のクラス(HttpSessionなど)のプロパティマッパーを作成する場合は、doStartService()でregisterメソッドを呼び出すだけのグローバルスコープの汎用サービスを作成する必要があります。次に、そのサービスを最初のサービスに追加できます。

于 2013-12-30T03:15:44.730 に答える