Seasar DI Container with AOP

Beansクラスは、Commons BeanUtilsの 流れるようなインターフェース版です。 流れるようなインターフェースについては、 こちらをご覧ください

Beansクラスを使うには、S2-Tigerが必要です。 セットアップについては、こちらをご覧ください。

プロパティのコピー

JavaBeansとJavaBeans、MapとJavaBeans、MapとMap間でプロパティをコピーするためには、 copy(Object src, Object dest)execute()を組み合わせます。 最初の引数がコピー元、二番目の引数がコピー先です。

SrcBean src = new SrcBean();
DestBean dest = new DestBean();
...
Beans.copy(src, dest).execute();

オブジェクトの生成とプロパティのコピー

JavaBeansやMapを生成し、プロパティをコピーするためには、 createAndCopy(Class<T> destClass, Object src)execute()を組み合わせます。 最初の引数が生成するクラス、二番目の引数がコピー元です。

SrcBean src = new SrcBean();
...
DestBean dest = Beans.createAndCopy(DestBean.class, src).execute();

コンバータ

特定の型やプロパティに値を設定するときに、 変換が必要な場合は、 converter(Converter converter, String... propertyNames)を使います。

Converterは、下記のようなインターフェースです。

public interface Converter {

    /**
     * 値を文字列として返します。
     * 
     * @param value
     *            値
     * @return 文字列としての値
     */
    String getAsString(Object value);

    /**
     * 値をオブジェクトとして返します。
     * 
     * @param value
     *            値
     * @return オブジェクトとしての値
     */
    Object getAsObject(String value);

    /**
     * 対象の型かどうかを返します。 対象のプロパティを指定しない場合に呼び出されます。
     * 
     * @param clazz
     * @return
     */
    boolean isTarget(Class clazz);
}

propertyNamesでプロパティが指定された場合は、そのプロパティがコンバータの対象になり、 プロパティが指定されない場合は、Converter#isTarget(プロパティの型)がtrueを返す プロパティが対象になります。

標準のコンバータとして、org.seasar.framework.beans.converterに DateConverterとNumberConverterが用意されています。 どちらのコンバータもコンストラクタで、日付あるいは数値のパターンを指定します。 パターンの書式は、DateFormat、DecimalFormatのものを指定します。。

日付コンバータ

日付用のコンバータの指定は、 dateConverter(String pattern, String... propertyNames)を使います。

patternは、DateFormatのパターンを指定します。

数値コンバータ

数値用のコンバータの指定は、 numberConverter(String pattern, String... propertyNames)を使います。

patternは、DecimalFormatのパターンを指定します。

特定のプロパティだけを対象にする

特定のプロパティだけを対象にするには、 includes(String... propertyNames)を使います。

SrcBean src = new SrcBean();
DestBean dest = new DestBean();
...
Beans.copy(src, dest).includes("foo", "bar").execute();

特定のプロパティだけを対象外にする

特定のプロパティだけを対象外にするには、 excludes(String... propertyNames)を使います。 includes()と同時に指定した場合は、includes()で指定されたプロパティから excludes()で指定されているものが除かれます。

SrcBean src = new SrcBean();
DestBean dest = new DestBean();
...
Beans.copy(src, dest).excludes("foo", "bar").execute();

特定のプレフィックスのついたプロパティだけを対象にする

特定のプレフィックスのついたプロパティだけを対象にするには、 prefix(String prefix)を使います。 コピー先のプロパティ名からプレフィックスは取り除かれます。

public where_aaa;
...
BeanMap map = Beans.createAndCopy(BeanMap.class, this).prefix("where_").execute();
System.out.println(map.get("aaa"));

null値のプロパティを対象外にする

null値のプロパティを対象外にするには、 excludesNull()を使います。

SrcBean src = new SrcBean();
DestBean dest = new DestBean();
...
Beans.copy(src, dest).excludesNull().execute();

空白文字列のプロパティを対象外にする

空白文字列のプロパティを対象外にするには、 excludesWhitespace()を使います。

SrcBean src = new SrcBean();
DestBean dest = new DestBean();
...
Beans.copy(src, dest).excludesWhitespace().execute();

beanDelimiterとmapDelimiter

department$nameのような'$'をデリミタにしたプロパティ名を持つJavaBeansをMapにコピーすると、 department.nameのような'.'をデリミタにしたプロパティ名に変換されます。 これは、S2JDBCのwhere() で使うために用意されている機能です。 '$'と'.'は、それぞれbeanDelimiter(char beanDelimiter)mapDelimiter(char mapDelimiter)を使って変更することができます。

BeanMap

BeanMapは、HashMap<String, Object>なクラスで、 存在しないプロパティにアクセスすると例外を投げるようになっています。