Plain Old Java Objects (Os Singelos Clássicos Objetos Java), ou POJOs, são objetos Java que seguem um desenho simplificado em contraposição aos EJBs, por exemplo. Um JavaBean é um POJO que segue definições rígidas de estrutura (construtor default sem argumentos e métodos que seguem o padrão de getters e setters para seus atributos).

Este padrão é baseado na ideia de que quanto mais simples o projeto, melhor. O termo foi inventado por Martin Fowler, Rebecca Parsons e Josh MacKenzie em Setembro de 2000. "Nós queríamos saber porque as pessoas eram contra o uso de objetos regulares em seus sistemas e concluímos que era devido a falta de um nome extravagante para eles. Assim nós demos-lhes um, e funcionou muito bem.". O termo segue o padrão de atribuir um nome para tecnologias que não possuem nenhuma característica nova, como POTS (Plain Old Telephone Service).

O termo ganhou aceitação por causa da necessidade de um termo comum e facilmente inteligível que contrasta com complicados frameworks de objetos. É mais atrativo do que o termo bean do Java devido à confusão gerada pela semelhança dos termos JavaBeans e os EJB (Enterprise JavaBeans). O primeiro é predominantemente um POJO que segue rigorosas convenções para nomear métodos, e o último é um modelo de componente (EJB 3 reduz o grau de diferença entre eles).

Definição Falando idealmente, um POJO é um objeto de Java não limitado por alguma restrição outra que esses forçados por Java Language Specification. Em outras palavras, um POJO deve: Não estender classes pre-especificadas, como em public class Foo extends javax.servlet.http.HttpServlet { ... Não implementar interfaces pre-especificadas, como em public class Bar implements javax.ejb.EntityBean { ... Não conter anotações pre-especificadas, como em @javax.persistence.Entity public class Baz { ... No entanto, por causa das dificuldades técnicas e outras razões, muitos produtos de software ou muitos framework descritos como acordantes com POJO ainda pedem efectivamente o uso das anotações pre-especificadas para tais características como persistência para funcionar correctamente. A ideia é que se o objeto (efectivamente a classe) foi um POJO dantes de que algumas anotações foram acrescentadas, e regressaria no estado de POJO se as anotações são tiradas, então pode estar considerado como um POJO. Então o objeto básico fica um POJO no sentido que não tem características especiais (como uma interface implementada) que o fazem "Specialized Java Object" (SJO ou (sic) SoJO).

Exemplo Este exemplo mostra uma classe POJO que segue o padrão JavaBean. public class Carro implements java.io.Serializable {

private String nome;

private String cor;

public Carro() {

public Carro(String nome, String cor) { this.nome = nome; this.cor = cor;

public String getCor() { return cor;

public void setCor(String cor) { this.cor = cor;

public String getNome() { return nome;

public void setNome(String nome) { this.nome = nome;

Categoria:Java (linguagem de programação)