现在的位置: 首页 > 综合 > 正文

POJO

2013年10月08日 ⁄ 综合 ⁄ 共 1679字 ⁄ 字号 评论关闭

原文:http://en.wikipedia.org/wiki/Plain_Old_Java_Object

POJO means Plain Old Java Object. The name is used to emphasize that a given object is an ordinary Java Object, not a special object.

The term "POJO" is mainly used to denote a Java object which does not follow any of the major Java object models, conventions, or frameworks

理论上,a POJO需要符合的条件是:

1,不能继承任何父类。

2,不能实现任何接口。

3,不能使用任何annotation (这点有些框架并没有遵守)

javabean就是POJO的一个例子。一个理想的bean:

public class MyBean {
 
    private String someProperty;
 
    public String getSomeProperty() {
         return someProperty;
    }
 
    public void setSomeProperty(String someProperty) {
        this.someProperty = someProperty;
    }
}

如代码所示,没有参数化的构造函数,允许通过get/set方法使用成员变量。同时使用了简单的命名规范(getSomeProperty/setSomeProperty)。这种命名方式可以适用于任何javabean。

代码在和使用这种命名方式的对象打交道时,甚至不需要知道bean的类型。同时bean也可以被任何框架使用,而不用受限于任何特定的框架或工具。这是使用POJO最大的好处。

其实使用POJO提高了可测试性。因为对象不基本任何框架,因此可以方便的独立测试,而不需要和框架一起测。

Spring 是一个较早实现了这个想法的框架。其他的例子是:

  •     Enterprise JavaBeans,
  •     JPA (including Hibernate) --指java persistence api
  •     CDI

下面的例子展示了一个完整的EJB bean,显示了EJB3是如何遵循POJO 模型的。

public class HelloWorldService {
 
    public String sayHello() {
        return "Hello, world!";
    }
}

如代码所示,这个bean不需要继承任何EJB类,或是实现任何EJB接口,或是EJB的annotation。取而代之的是,程序员使用一个外部的xml文件来表明哪些EJB services应该被添加到bean里:

<enterprise-beans>
    <session>
        <ejb-name>helloWorld</ejb-name>
        <ejb-class>com.example.HelloWorldService</ejb-class>
       <session-type>stateless</session-type>
    </session>
</enterprise-beans>

在现实生活中,一些人认为使用annotation更优雅,因为xml显得有些冗余,不好看而且不好维护。但是其他一些人认为annotation并不符合POJO模型。

因此,很多框架(Spring, EJB, JPA) 同时允许使用annotation和xml。

@Stateless
public class HelloWorldService {
 
    public String sayHello() {
        return "Hello, world!";
    }
}

如上使用了annotation,使得这个bean不再是纯粹的POJO了。但是使用annotation比起使用继承父类/接口,缺点还是少很多的。因此认为这样还是基本符合POJO模型的。

抱歉!评论已关闭.