Plain Old Java Object (または Plain Ordinary Java Object) の略語。「昔ながらのただのJavaオブジェクト」といったところか。
Martin Fowlerいわく、2000年9月に彼が作った造語だそうである。
特定のクラスの拡張やインタフェースの実装を求められる (EJB 2.1までの) 複雑なEJBコンポーネントと対比する文脈で使われてる場合が多いようだ。
POJOは必ずしもJavaBeansではないが、事実上、JavaBeansと同義で使われるケースもある。EJB (Enterprise JavaBeans) が、その名前とは裏腹にJavaBeansとは別物だったのに対し、単なるJavaオブジェクト/JavaBeansに回帰しようという動きがあり、POJOという用語もその動きとともに広まった。
このあたりの流れを押さえるには、Spring Framework、SeasarなどのDIコンテナ、Hibernate、Oracle TopLinkなどのO/Rマッピング・フレームワーク、(Spring Frameworkの主要開発者) Rod Johnsonらによる書籍 "Expert One-on-One J2EE Development without EJB" などを参照。
なお、EJB 3.0では、上記のようなアンチEJBの動きに対応し、EJBのアーキテクチャを変更して、POJO O/RマッピングやDIコンテナの主要な機能が取り込まれた。これにより、EJBコンポーネントをPOJOとして開発できるようになっている。