
【Java】JavaBeansについて学ぼう
 公開日: 2025/5/7
Javaを勉強したことがある人はJavaBeansについてご存じでしょうか。
WEBアプリケーションでよく使われる印象ですが、なにが便利なのか、そもそもJavaBeansとはなにか、メリット・デメリットはなにか、記事作成を通して調査してまとめてみました。
1. JavaBeansとは

ジャヴァビーンズと読みます。
名前の由来には諸説ありますが、Javaのロゴがコーヒーであることから、コーヒーの原料であるコーヒー豆から名づけられているといわれています。
JavaBeansとはJavaで書かれた再利用可能なソフトウェアコンポーネントまたはその技術仕様のことで1997年後半に登場しており、だいぶ歴史としては長いです。
JavaBeansを分かりやすく説明します。
まず会員登録画面があるとします。
その会員登録画面に氏名、誕生日、住所、性別、メール、パスワード等を入力するとします。
そして入力が終わった後は確認画面へ画面遷移しますが、ここまで入力した個人情報を保管しておいてくれるのがJavaBeansになります。
2. JavaBeansの特徴

1.プロパティへのgetter/setterメソッドを持つ
getter/setterは、作成したプロパティに外部からアクセスするためのメソッドです。以下が説明になります。
■getter(ゲッター)メソッド
getterは、JavaBeansのプロパティから値を取得するために利用するメソッドになります。
以下の規則でメソッドを作成します。
・メソッド名は「getプロパティ名(プロパティの先頭文字は大文字にする)」
・対応するプロパティの値を返却する
■setter(セッター)メソッド
setterは、JavaBeansのプロパティに値を格納するために利用するメソッドになります。
以下の規則でメソッドを作成します。
・メソッド名は「setプロパティ名(プロパティの先頭文字は大文字にする)」
・対応するプロパティに格納する値を受け取り、プロパティに代入する
2.引数のないpublicコンストラクタを持つ
引数なしにインスタンスを生成できるということは、後述の「シリアライズ」を行う上で重要な意味合いをもちます。フレームワークでは、自動でJavaBeansを作成するような機能をもっているものが多くあります。
その時、フレームワークはJavaBeansのルールに基づき、「引数なしのコンストラクタ」を利用してJavaBeansを生成します。
3.java.io.Serializableを実装している
Serializableインタフェースを実装することでスコープ内のインスタンスを直列化してファイル等に保存したり、ネットワークを介して送信したりすることができるようになります。これを「シリアライズ」と呼びます。
インスタンスを直列化してファイルに保存できれば、以下2つが可能になります。
・Tomcat等のアプリケーションサーバーが停止した場合も再起動してインスタンスを復元できる
・一時的にメモリが溢れた場合にも退避させることができる
3. JavaBeansのルール
・クラスはpublicで宣言する
・クラス名は「~Bean」とする
4. JavaBeansのメリット

1.カプセル化を実現できる
カプセル化とは、プログラムの一部分を隠蔽し、外部からの直接的なアクセスを制限することを指します。プロパティを活用することで、以下2点のフィールド変数とは違った細かいアクセス制御が実現できます。
・値の参照はできるけど代入はできない
・継承したクラスからしか値を代入できない
2.シリアライズすることで通信に利用できる
通常のJavaオブジェクトでは、サーバー間などでデータの送受信をするために利用することができません。Serializableインターフェースを実装することで通信に利用できるようになり、JSPでの利用やセッションへの格納が可能となります。
3.学習コストが低い
そこまでJavaBeans特有の記述は多くありません。また、内容としても難しくはないため、学習コストは低い方だと考えられます。
5. JavaBeansのデメリット
1.ネットワークを介在してのやりとりができない
外部プログラムとJavaBeansの間や、JavaBeans同士でプログラムを活用したいときにネットワークを介在してやりとりすることができないことにあります。
6. JavaBeansの使い方
以下はJavaBeansのサンプルコードです。
1.Beanを作成する
 1.import java.io.Serializable;
 2. 
 3.public class SampleBean implements Serializable {
 4.    private static final long serialVersionUID = 1L;
 5.    
 6.    private String name;
 7.    private String age;
 8. 
 9.    public SampleBean() {};
10. 
11.    public void setName(String name) {
12.        this.name = name;
13.    }
14.    public String getName() {
15.        return this.name;
16.    }
17. 
18.    public void setAge(String age) {
19.        this.age = age;
20.    }
21.    public String getAge() {
22.        return this.age;
23.    }
24.}7. JSPでJavaBeansを使う方法
1.サーブレットを作成する
 1.package beans;
 2.
 3.import java.io.IOException;
 4.
 5.import javax.servlet.ServletException;
 6.import javax.servlet.annotation.WebServlet;
 7.import javax.servlet.http.HttpServlet;
 8.import javax.servlet.http.HttpServletRequest;
 9.import javax.servlet.http.HttpServletResponse;
10.
11.@WebServlet("/hello")
12.public class HelloServlet extends HttpServlet{
13.
14.    @Override
15.    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
16.    
17.        // Beanを生成
18.        UserInfoBean userInfoBean = new UserInfoBean();
19.
20.        // setterを使ってプロパティを代入
21.        userInfoBean.setName("hoge田 hoge美");
22.        userInfoBean.setAge("23");
23.
24.        // リクエストスコープにBeanを保持
25.        req.setAttribute("userInfo", userInfoBean);
26.        
27.        // JSPを表示
28.        req.getRequestDispatcher("/WEB-INF/user.jsp").forward(req, resp);
29.    }
30.}2.JSPを作成する
 1.<%@ page pageEncoding="UTF-8" %>
 2.<!DOCTYPE html>
 3.<html lang="ja">
 4.<head>
 5.    <meta charset="UTF-8">
 6.    <meta name="viewport" content="width=device-width, initial-scale=1.0">
 7.    <title>一覧</title>
 8.</head>
 9.<body>
10.    <jsp:useBean id="userInfo" class="beans.UserInfoBean" scope="requ8. JavaBean,DTO,Entity,VOの違い

1.JavaBeanについて
これまで記述してきたため、割愛します。2.DTOについて
DTO(Data Transfer Object)はデータを受け渡すためのクラスになります。3.Entityについて
データベースのテーブルと対応付けられるJavaクラスのことです。4.VOについて
VO(Value Object)はなにかしらの値を表すオブジェクトのことです。9. まとめ
記事作成を通してJavaBeansについてまとめました。
データのアクセスに関連する処理はJavaBeansに任せれば良いということが理解できました。
この記事を読んだ方が少しでも理解していただけたら幸いです。
