`

Struts2之POJO

 
阅读更多

一:什么是POJO
POJO的名称有多种,pure old java object 、plain ordinary java object 等。
按照Martin Fowler的解释是“Plain Old Java Object”,从字面上翻译为“纯洁老式的java对象”,但大家都使用“简单java对象”来称呼它。
POJO的内在含义是指那些没有从任何类继承、也没有实现任何接口,更没有被其它框架侵入的java对象。
POCO的概念是从java的POJO借用而来,而两者的含义是一致的,不同的仅仅是使用的语言不一样。所以POCO的解释就是“Plain Old C# Object”。

 

二:为什么会有POJO?
主要是Java的开发者被EJB的繁杂搞怕了,大家经过反思,又回归“纯洁老式”的JavaBean,即有无参构造函数,每个字段都有getter和setter的java类。

 

三:POJO的意义
POJO让开发者可专注于业务逻辑和脱离框架的单元测试。除此之外, 由于POJO并不须要继承框架的类或实现其接口,开发者能够极其灵活地搭建继承结构和建造应用。
POJO的意义就在于它的简单而灵活性,因为它的简单和灵活,使得POJO能够任意扩展,从而胜任多个场合,也就让一个模型贯穿多个层成为现实。
先写一个核心POJO,然后实现业务逻辑接口和持久化接口,就成了Domain Model; UI需要使用时,就实现数据绑定接口,变成VO(View Object)。

 

四:POJO与PO、VO的区别
POJO是指简单java对象(Plain Old Java Objects、pure old java object 或者 plain ordinary java object)。
PO是指持久对象(persistant object持久对象)。
VO是指值对象或者View对象(Value Object、View Object)。注意,本文的VO特指View Object。

持久对象实际上必须对应数据库中的entity,所以和POJO有所区别。比如说POJO是由new创建,由GC回收。但是持久对象是insert数据库创建,由数据库delete删除的。基本上持久对象生命周期和数据库密切相关。另外持久对象往往只能存在一个数据库Connection之中,Connnection关闭以后,持久对象就不存在了,而POJO只要不被GC回收,总是存在的。
由于存在诸多差别,因此持久对象PO(Persistent Object)在代码上肯定和POJO不同,起码PO相对于POJO会增加一些用来管理数据库entity状态的属性和方法。而ORM追求的目标就是要PO在使用上尽量和POJO一致,对于程序员来说,他们可以把PO当做POJO来用,而感觉不到PO的存在。

 

五:POJO的扩展
POJO仅包含最简单的字段属性,没有多余的东西,它本质上就是一个普通的JavaBean。
但是在POJO的基础上,能够扩展出不同的对象。
为POJO增加了持久化的方法(Insert、Update、Delete……)之后,POJO就变成了PO。
为POJO增加了数据绑定功能之后,POJO就变成了View Object,即UI Model。
为POJO增加业务逻辑的方法(比如单据审核、转帐……)之后,POJO就变成了Domain Model。
POJO还可以当作DTO使用。

分享到:
评论

相关推荐

    Struts2 Pojo(六)

    在本篇“Struts2 Pojo(六)”中,我们将深入探讨Struts2如何利用Pojo来增强其灵活性和可维护性。 首先,让我们理解什么是Pojo。Pojo是一个没有特殊限制的普通Java对象,不包含任何框架特定的代码,如注解或接口...

    struts1和struts2的区别

    ### Struts1与Struts2的主要区别 #### 概述 Apache Struts 是一个用于构建企业级Java Web...尽管如此,在某些特定的应用场景下,Struts1可能仍然有其适用之处。选择合适的框架取决于项目的具体需求和技术团队的偏好。

    struts1和struts2的区别(详细)

    此外,Struts2支持POJO风格的Action,即普通的Java对象也可以作为Action使用。 #### 二、依赖于Servlet API的程度不同 - **Struts1**: 在Struts1中,Action直接依赖于Servlet API,如`HttpServletRequest`和`...

    Struts2与Struts1区别

    ActionSupport 类则提供了常用功能的实现,但 Action 接口并非强制,任何包含 execute 方法的普通 Java 对象(POJO)都能作为 Struts2 的 Action。 2. **线程模型**: - Struts1 的 Action 实例是单例的,这意味着...

    Struts2+技术内幕——深入解析Struts2架构设计与实现原理

    本书《Struts2技术内幕——深入解析Struts2架构设计与实现原理》结合提供的《struts2基础.chm》资料,为我们提供了深入理解Struts2内部机制的机会。 首先,Struts2的核心在于它的拦截器(Interceptor)机制。拦截器...

    struts2 与 struts1的区别

    相比之下,**Struts2** 采用了更为灵活的设计理念,Action类只需要实现`Action`接口即可。这样的设计不仅提供了更多的选择空间,还允许Action类同时实现其他接口,从而实现了服务的可选性和定制化。此外,Struts2...

    struts2面试题

    Action 接口不是必须的,任何有 execute 标识的 POJO 对象都可以用作 Struts2 的 Action 对象。 4. Struts2 的线程模式: Struts2 Action 对象为每一个请求产生一个实例,因此没有线程安全问题。Struts1 Action 是...

    struts1和struts2区别

    - **Struts2**:Action类可以实现Action接口或者直接使用ActionSupport基类,也可以是任何具有`execute`方法的普通Java对象(POJO),这增加了代码的可定制性和可扩展性。 2. **线程模式**: - **Struts1**:...

    Struts1和Struts2的区别和对比

    而Struts2则更倾向于使用接口,Action类可以实现Action接口或其他自定义接口,甚至可以直接使用具有execute方法的POJO对象。Struts2还提供了一个ActionSupport基类,以方便实现常见的接口功能,如国际化和数据验证。...

    struts2学习心得

    4. **POJO Action类**:Struts2支持使用简单的JavaBean作为Action类,这种被称为POJO(Plain Old Java Object)的Action类继承自`ActionSupport`类,可以重写其方法来处理请求。通过这种方式,开发者可以避免在...

    转:struts1与struts2的区别

    - **Struts2**: 相比之下,Struts2提供了更多的灵活性。Action类可以选择实现一个接口`com.opensymphony.xwork2.Action`,也可以实现其他自定义接口。Struts2还提供了一个基础类`...

    STRUTS2优缺点

    - **STRUTS2 的 Action 设计更灵活:**与 STRUTS1 中 Action 必须继承自 `Action` 类不同,STRUTS2 允许 Action 作为 POJO(Plain Old Java Object)存在,这意味着开发者可以更加自由地设计业务逻辑类。...

    Struts2学习笔记

    - **Action的灵活性增强**:Struts2.x中的Action可以是任何实现了特定接口或注解的POJO,无需继承特定的基类。 - **IoC的支持**:Struts2.x内置了对IoC容器(如Spring)的支持,方便进行依赖注入,提高了代码的可...

    Struts1和Struts2的区别和对比.txt

    **Struts2**中的Action可以是任意的Java对象(POJO),不需要继承特定的类或实现特定的方法。Struts2通过拦截器(Interceptor)机制来处理请求,这种方式更加灵活,易于维护和扩展。 ##### 2. **框架架构** **...

    struts1.0和struts2

    此外,Struts2的ActionSupport基类提供了对常用接口的实现,使得Action对象的创建更加灵活,不再局限于Action接口,任何具有execute方法的POJO对象都可以作为Struts2的Action对象。 线程模型方面,Struts1采用单例...

    struts2代码演示

    - 支持POJO(Plain Old Java Object)Action,直接在Action类中声明字段,Struts2会自动将请求参数注入。 7. **国际化与本地化** - Struts2提供内置的国际化支持,通过资源文件管理多语言文本。 - 通过`Accept-...

Global site tag (gtag.js) - Google Analytics