In software engineering, a Plain Old Java Object (POJO) is an ordinary Java object, not bound by any special restriction and not requiring any class path. The term was coined by Martin Fowler, Rebecca Parsons and Josh MacKenzie in September 2000.
The following shows an example of a JavaServer Faces (JSF) component having a bidirectional binding to a POJO's property:
The definition of the POJO can be as follows:
Because of the JavaBean naming conventions the single "someProperty"
reference can be automatically translated to the "getSomeProperty()" (or
"isSomeProperty()" if the property is of Boolean type) method for getting a value, and to the "setSomeProperty(String)" method for setting a value.
Spring was an early implementation of this idea and one of the driving forces behind popularizing this model.
An example of an EJB bean being a POJO:
As given, the bean does not need to extend any EJB class or implement
any EJB interface and also does not need to contain any EJB
annotations. Instead, the programmer declares in an external XML file which EJB services should be added to the bean:
In practice, some people find annotations elegant, while they see XML
as verbose, ugly and hard to maintain, yet others find annotations
pollute the POJO model. [7]
Thus, as an alternative to XML, many frameworks (e.g. Spring, EJB and JPA) allow annotations to be used instead of or in addition to XML. The following shows the same EJB bean as showed above but with an annotation added. In this case the XML file is no longer needed:
With the annotation as given above the bean isn't a truly pure POJO
anymore, but since annotations are merely passive metadata this has far
fewer harmful drawbacks compared to the invasiveness of having to extend
classes and/or implement interfaces.[6] Accordingly, the programming model is still very much like the pure POJO model.
Definition
Ideally speaking, a POJO is a Java object not bound by any restriction other than those forced by the Java Language Specification; i.e. a POJO should not have to- Extend prespecified classes, as in
public class Foo extends javax.servlet.http.HttpServlet { ...
- Implement prespecified interfaces, as in
public class Bar implements javax.ejb.EntityBean { ...
- Contain prespecified annotations, as in
@javax.persistence.Entity public class Baz { ...
JavaBeans
A JavaBean is a POJO that is serializable, has a no-argument constructor, and allows access to properties using getter and setter methods that follow a simple naming convention. Because of this convention, simple declarative references can be made to the properties of arbitrary JavaBeans. Code using such a declarative reference does not have to know anything about the type of the bean, and the bean can be used with many frameworks without these frameworks having to know the exact type of the bean. The JavaBeans specification, if fully implemented, slightly breaks the POJO model as the class must implement the Serializable interface to be a true JavaBean. Many POJO classes still called JavaBeans do not meet this requirement. Since Serializable is a marker (method-less) interface, this is not much of a burden.The following shows an example of a JavaServer Faces (JSF) component having a bidirectional binding to a POJO's property:
<h:inputText value="#{MyBean.someProperty}"/>
public class MyBean {
private String someProperty;
public String getSomeProperty() {
return someProperty;
}
public void setSomeProperty(String someProperty) {
this.someProperty = someProperty;
}
}
Transparently adding services
As designs using POJOs have become more commonly used, systems have arisen that give POJOs the full functionality used in frameworks and more choice about which areas of functionality are actually needed. In this model, the programmer creates nothing more than a POJO. This POJO purely focuses on business logic and has no dependencies on (enterprise) frameworks. Aspect-oriented programming (AOP) frameworks then transparently add cross-cutting concerns like persistence, transactions, security, and so on.[6]Spring was an early implementation of this idea and one of the driving forces behind popularizing this model.
An example of an EJB bean being a POJO:
- Enterprise JavaBeans (EJB),
- Java Persistence API (JPA) (including Hibernate)
- CDI (Contexts and Dependency Injection for the Java EE platform)
public class HelloWorldService {
public String sayHello() {
return "Hello, world!";
}
}
<enterprise-beans>
<session>
<ejb-name>helloWorld</ejb-name>
<ejb-class>com.example.HelloWorldService</ejb-class>
<session-type>stateless</session-type>
</session>
</enterprise-beans>
Thus, as an alternative to XML, many frameworks (e.g. Spring, EJB and JPA) allow annotations to be used instead of or in addition to XML. The following shows the same EJB bean as showed above but with an annotation added. In this case the XML file is no longer needed:
@Stateless
public class HelloWorldService {
public String sayHello() {
return "Hello, world!";
}
}
No comments:
Post a Comment