Search code examples
javapojo

How to create a POJO?


Recently I've started hearing about "POJOs" (Plain Old Java Objects). I googled it, but still don't understand the concept well. Can anyone give me a clear description of a POJO?

Consider a class "Person" with variables "id, name, address, salary" -- how would I create a POJO for this scenario? Is the code below a POJO?

public class Person {
    //variables
    People people = new People();
    private int id;
    private String name;
    private String address;
    private int salary;


    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getAddress() {
        return address;
    }

    public int getSalary() {
        return salary;
    }

    public void setId() {
        this.id = id;
    }

    public void setName() {
        this.name = name;
    }

    public void setAddress() {
        this.address = address;
    }

    public void setSalary() {
        this.salary = salary;
    }
}

Solution

  • A POJO is just a plain, old Java Bean with the restrictions removed. Java Beans must meet the following requirements:

    1. Default no-arg constructor
    2. Follow the Bean convention of getFoo (or isFoo for booleans) and setFoo methods for a mutable attribute named foo; leave off the setFoo if foo is immutable.
    3. Must implement java.io.Serializable

    POJO does not mandate any of these. It's just what the name says: an object that compiles under JDK can be considered a Plain Old Java Object. No app server, no base classes, no interfaces required to use.

    The acronym POJO was a reaction against EJB 2.0, which required several interfaces, extended base classes, and lots of methods just to do simple things. Some people, Rod Johnson and Martin Fowler among them, rebelled against the complexity and sought a way to implement enterprise scale solutions without having to write EJBs.

    Martin Fowler coined a new acronym.

    Rod Johnson wrote "J2EE Without EJBs", wrote Spring, influenced EJB enough so version 3.1 looks a great deal like Spring and Hibernate, and got a sweet IPO from VMWare out of it.

    Here's an example that you can wrap your head around:

    public class MyFirstPojo
    {
        private String name;
    
        public static void main(String [] args)
        {
           for (String arg : args)
           {
              MyFirstPojo pojo = new MyFirstPojo(arg);  // Here's how you create a POJO
              System.out.println(pojo); 
           }
        }
    
        public MyFirstPojo(String name)
        {    
            this.name = name;
        }
    
        public String getName() { return this.name; } 
    
        public String toString() { return this.name; } 
    }