raqwel’s diary

Web系で働いている駆け出しエンジニアの備忘録です。

POJOとは??

それは仕事中に・・・

仕事中に実装でわからないことがあり、人に聞いてみたところ

「それはPOJOを作っといて、そこにListを作っておいてそこにどんどんaddしていって・・・」と言われました。

後半の話はわかったのですが、如何せん最初の「POJO」がわからなかったために完全にわかったとは言えませんでした。

ということでPOJOとは何なのか調べてみました。

調べてみた

とりあえずググる

Plain Old Java Object - Wikipedia

ごく普通のJavaオブジェクトであることを強調した名称

ごく普通ってなんなんだ・・・

いつだって「普通」というのは難しい・・・

もっと調べてみた

普通という意味を探しにいろいろと探してみたら、

Springの公式がとても良さそうなタイトルで教えてくれました。

Understanding POJO

この中の1つ目のコードを抜粋してみます。

public class ExampleListener implements MessageListener {

    public void onMessage(Message message) {
        if (message instanceof TextMessage) {
            try {
                System.out.println(((TextMessage) message).getText());
            }
            catch (JMSException ex) {
                throw new RuntimeException(ex);
            }
        }
        else {
            throw new IllegalArgumentException("Message must be of type TextMessage");
        }
    }

}

この1つ目の例では「MessageListner」をimplementsしているため、JMXに依存しきってしまったコードになっており、

別のメッセージ系のフレームワーク(この中だとAMQP)の移行しようとしても困難であったり、もはや不可能となってしまっている、とありました。

そこで2つめのコードとその説明です。

@Component
public class ExampleListener {

    @JmsListener(destination = "myDestination")
    public void processOrder(String message) {
    	System.out.println(message);
    }
}

これだと、なにもimplementsされておらず、代わりにアノテーションが付与されています。ここでJMXからAMQPに移行しようとしたらアノテーションを取り替えるだけで移行できそうですし、なによりimplementsみたいに依存してしまっているわけではありません。

このような特定なinterfaceやフレームワーク、規約に依存していない、単純な設計のjavaオブジェクトのことをPOJOと言うようです。

つまり・・・?

つまりPOJOというのは「特定のinterfaceやフレームワーク、規約に依存していない単純な設計となっているクラスやインスタンス等のオブジェクト」というようです。

なるほどなるほど・・・