検索
連載

リクエストデータをJavaBeansにセット(Commons活用)JavaTips 〜Apache/Jakarta編

PC用表示
Share
Tweet
LINE
Hatena

JavaBeansのプロパティを文字列として指定

 Javaで記述されたコンポーネント間で、まとまった情報をやり取りしたい場合は、JavaBeansを使用すると便利です。JavaBeansのプロパティxxxに値をセットしたり取得したりするには、setXxx()やgetXxx()メソッドを呼ぶコードを記述します。しかし、XML形式の設定ファイル内に、JavaBeansにセットしたいプロパティ名と値の組が記述されていた場合等、アクセスしたいプロパティのプロパティ名を文字列として指定したい場合があります。このようなときは、java.lang.reflectパッケージによるリフレクションを用いて、プロパティ文字列に対応するsetter/getterメソッドを呼ぶコードを記述するのが一般的ですが、リフレクションを使用したコードは記述が大変で読みにくく、保守性が低くなるという問題があります。この問題はBeanUtilsを用いると解決します。

BeanUtilsの概要

 BeanUtilsは、Jakarta Commonsプロジェクトの産物であり、JavaBeansを容易に扱えるようにするためのユーティリティです。

 BeanUtilsのダウンロードはhttp://jakarta.apache.org/commons/beanutils/から行えます。執筆時点の最新版はバージョン1.5です。また、実行にはJakarta Commons Logging(http://jakarta.apache.org/commons/logging/からダウンロード可能)のcommons-logging.jarも必要です。ダウンロードしたzipファイルを展開して出てきたcommons-beanutils.jar、およびcommons-logging.jar双方にクラスパスに通すことでjavaコードから使用可能になります。

BeanUtilsを用いてJavaBeansのプロパティを文字列で指定しアクセスする

 BeanUtilsに含まれるorg.apache.commons.beanutils.PropertyUtilsBeanクラスを用いると、アクセスしたいプロパティを文字列として指定することができ、しかもリフレクションを用いた場合よりもコードの記述性や見通しが良くなります。さらに、PropertyUtilsBeanには以下のような機能もあります。

  • あるJavaBeansのプロパティaに格納された値が別のJavaBeansになっている場合、ネストしたJavaBeansのプロパティbを「a.b」のように文字列として指定し、直接アクセスする
  • プロパティcに格納された値が配列である場合、配列のn番目の要素を「c[2]」(n=2の場合)のように文字列として指定し、直接アクセスする
  • プロパティdに格納された値がMapである場合、あるキーを持つ要素を「d(somekey)」(キーがsomekeyの場合)のように文字列として指定し、直接アクセスする
  • 2つのJavaBeansのインスタンス同士で共通するプロパティ名の内容をコピーする

 これらの機能をリフレクションを用いて実装するのはとても大変ですが、BeanUtilsのPropertyUtilsBeanでは簡単に使用することができます。

 プロパティ名を文字列として指定し、プロパティにアクセスするにはPropertyUtilsBean#setProperty、PropertyUtilsBean#getPropertyを使用します。2つのJavaBeansのインスタンス同士で共通するプロパティ名の内容をコピーするにはPropertyUtilsBean#copyPropertiesを使用します。

 SampleBeanとSampleBean2というJavaBeansのインスタンスに対して、BeanUtilsを用いてプロパティにアクセスする例をBeanUtilsSample.javaに示します。配列のインデックスやMapのキーを文字列で指定することで、プロパティに格納された配列やMapインスタンス内の1要素に簡単にアクセスできていることが分かります。

SampleBean.java

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***


SampleBean2.java

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***


BeanUtilsSample.java

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***


実行結果

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***


Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る