Web開発をするならJavaBeansクラスはいち早く慣れておかなければならないクラスです。
今回の記事では、JavaBeansについて初心者にもわかりやすく解説していきます。
JavaBeans
JavaBeansとは
JavaBeansを一言で表すと「Javaコードで書かれた再利用可能なコンポーネントまたは仕様」となります。もう少し噛み砕いて説明すると、データを格納する倉庫の役割を持つクラスこのことで、全ての開発者が一定のルールを厳守したクラスを指します。
一定のルールとは以下を指します。
- java.io.Serializableインターフェースを実装する
- クラス指定はpublicのみに固定
- コンストラクタを指定する(publicで固定し引数はつけない)
- プロパティ(クラスのメンバ変数)はprivateで指定する
- setter/getterメソッドを作る
- カプセル化(隠蔽化)する
- クラス名の最後にはBeanと付ける(例:SampleBean など)
JavaBeansの仕様を踏まえたクラス
簡単な解説が完了したところで、実際にコードを見ながら説明していきます。
import java.io.Serializable; public class SampleBean implements Serializable { private static final long serialVersionUID = 1L; private String name; private String age; public SampleBean() {} public void setName(String name) {this.name = name;} public String getName() {return this.name;} public void setAge(String age) {this.age = age;} public String getAge() {return this.age;} }
以下はシリアライズに関する項目です。1セットで覚えてください。
java.io.Serializableインターフェースを実装することが前提なので、”java.io.Serializable”をインポートしています。
更に、シリアライズを行う場合はその対象となるクラスにjava.io.Serializableインターフェースを”implements”しなければなりません。
またシリアライズを実装した場合には”serialVersionUID”という定数を定義する必要もあります。
JavaBeansの仕様に沿ってクラスを定義すると上のコードのようになります。
またsetter/getterメソッドには命名規則があります。具体的には以下の通りとなります。
setterを記述する場合には「set + プロパティ(プロパティの先頭文字は大文字にする)」
getterを記述する場合には「get + プロパティ(プロパティの先頭文字は大文字にする)」
JavaBeansクラスでデータを扱ってみる
次のコードを見てください。
/* SampleBean.java */ import java.io.Serializable; public class SampleBean implements Serializable { // static final long serialVersionUIDが必要 private static final long serialVersionUID = 1L; // プロパティ(メンバ変数) private String name; private int age; // コンストラクタの public SampleBean() {} // プロパティnameのsetter、getter public void setName(String name) {this.name = name;} public String getName() {return this.name;} // プロパティageのsetter、getter public void setAge(int age) {this.age = age;} public int getAge() {return this.age;} } /* sampleJava.java */ public class sampleJava { public static void main(String[] args) { SampleBean sampleBean = new SampleBean(); sampleBean.setName("山田太郎"); sampleBean.setAge(20); System.out.println("Name:" + sampleBean.getName() + " Age:" + sampleBean.getAge()); } }
実行結果
Name:山田太郎 Age:20
このコードでは、mainクラス内に「SampleBean sampleBean = new SampleBean();」でインスタンスを作成し、setterメソッドでJavaBeansクラスにデータを渡しています。
そして最後にgetterメソッドを使いJavaBeansクラスに格納されているデータを取得し表示させるという流れになっています。
なお今回はシリアライズの記事ではないことから説明は省略していますが、JavaBeansクラスに Serializable を implements していますので、java.io.Serializableをimportする必要があるため、先頭で宣言しています。
Serializableについて
先にも述べましたが、JavaBeansクラスはその要件としてプロパティに格納した情報を保存できる必要があるため、Serializableインターフェイスの実装クラスとする必要があります。
(絶対的に必要なわけではありませんが、必要な場合が非常に多いため実装クラスで慣れておいた方が良いでしょう)
データの保存と復元
データの保存と復元については以下の通りです。
保存
Serializableインターフェイスを実装したオブジェクトは、ObjectOutputStreamクラスのwriteObjectメソッドを使用することでデータを保存できます。
writeObjectメソッドの引数にはSerializableインタフェースを実装したJavaBeansクラスのオブジェクトを指定します。
復元
保存したファイルからデータを復元するにはObjectInputStreamクラスのreadObjectメソッドを使用します。
コードを見てみる
それでは実際にコードを見てみましょう。
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public class sampleJava { public static void main(String[] args) { String fileName = "binary.bin"; SampleBean sample_a = new SampleBean(); sample_a.setName("山田太郎"); sample_a.setAge(20); try { ObjectOutputStream oos = new ObjectOutputStream( new FileOutputStream(fileName) ); oos.writeObject(sample_a); oos.close(); } catch(Exception e) { e.printStackTrace(); } SampleBean sample_b = null; try { ObjectInputStream ois = new ObjectInputStream( new FileInputStream(fileName) ); sample_b = (SampleBean)ois.readObject(); ois.close(); } catch (Exception e) { e.printStackTrace(); return; } System.out.println(sample_b.getName() + ", " + sample_b.getAge()); } }
実行結果
山田太郎, 20
このコードではまず、メインクラスで”binary.bin”という空のバイナリファイルを作成しています。
次にsetterメソッドでデータを登録し、オブジェクトのデータをバイナリに書き込んだ後もう一つ新たにインスタンスを生成しています。
更に、新たに作成したインスタンスにバイナリに保存してあるデータを読み込みをれを表示させるといった流れとなります。
実行結果からもわかるように、Serializableインタフェースを実装すればいつでもインスタンスに復元することが可能です。
まとめ
今回はJavaBeansクラスについて解説してきました。
JavaBeansクラスはJSPやサーブレットでもアクティブタグで利用することが出来る大変便利なコンポーネントです。
何度も見直しながら学習し、いち早くマスターしてください。