プレーンオールドJavaオブジェクトこの名前は、特定のオブジェクトが通常のJavaオブジェクトであり、EJB2フレームワークで定義されているような特別なオブジェクトではないことを強調するために使用されます。
クラスA{}
クラスBはC{}を拡張/実装します
注:Cが一種の分散フレームワーククラスまたはifcである場合、Bは非POJOです。例:javax.servlet.http.HttpServlet、javax.ejb.EntityBean、またはJ2EE extnであり、シリアル化可能/比較可能ではありません。シリアル化可能/比較可能であるため、POJOに対して有効です。
ここで、Aは独立した単純なオブジェクトです。BはCを拡張/実装しているため、Bは特別なオブジェクトです。したがって、BオブジェクトはCからより多くの意味を取得し、BはCからのルールに従うように制限され、Bは分散フレームワークと緊密に結合されます。したがって、Bオブジェクトはその定義からPOJOではありません。
クラスを使用するコードオブジェクト参照は、そのタイプについて何も知る必要がなく、多くのフレームワークで使用できます。
したがって、POJOは、1)事前に指定されたクラスを拡張し、2)事前に指定されたインターフェースを実装する必要はありません。
JavaBeanは、シリアライズ可能で、引数のないコンストラクターを持ち、単純な命名規則に従うgetterメソッドとsetterメソッドを使用してプロパティにアクセスできるPOJOの例です。
POJOは純粋にビジネスロジックに焦点を合わせており、(エンタープライズ)フレームワークに依存していません。これは、ビジネスロジックのコードがあることを意味しますが、このインスタンスの作成方法、このオブジェクトが属するサービス(EJB ..)、およびその特殊な特性(ステートフル/ステートレス)は、外部xmlを使用してフレームワークによって決定されます。ファイル。
例1:JAXBは、JavaオブジェクトをXMLとして表すサービスです。これらのJavaオブジェクトは単純で、デフォルトのコンストラクターゲッターとセッターがあります。
例2:テーブルを表すために単純なJavaクラスが使用されるHibernate。列がそのインスタンスになります。
例3:RESTサービス。RESTサービスでは、DB上でいくつかの操作を実行するためのサービスレイヤーとDaoレイヤーがあります。したがって、Daoにはベンダー固有のクエリと操作があります。サービスレイヤーは、DB操作を実行するためにどのDAOレイヤーを呼び出すかを担当します。DAOのAPI(メソッド)の作成または更新は、POJOを引数として取り、そのPOJOを更新し、DBに挿入/更新します。これらのPOJO(Javaクラス)には、各列とそのゲッターおよびセッターの状態(インスタンス変数)のみが含まれます。
実際には、注釈がエレガントであると感じる人もいれば、XMLを冗長で醜く、維持するのが難しいと考える人もいますが、注釈がPOJOモデルを汚染していると感じる人もいます。したがって、XMLの代わりに、多くのフレームワーク(Spring、EJB、JPAなど)では、XMLの代わりに、またはXMLに加えて注釈を使用できます。
利点:
アプリケーションコードをインフラストラクチャフレームワークから切り離すことは、POJOを使用する多くの利点の1つです。POJOを使用すると、アプリケーションのビジネスロジックを、不安定で絶えず進化するインフラストラクチャフレームワークから切り離すことで、将来にわたって利用できるようになります。新しいバージョンへのアップグレードや別のフレームワークへの切り替えが簡単になり、リスクが軽減されます。POJOを使用すると、テストも簡単になり、開発が簡素化および加速されます。インフラストラクチャコードと絡まないため、ビジネスロジックがより明確でシンプルになります
参照:wiki source2