学习笔记整理:POJO、JavaBean、DAO、EJB的概念的区别与联系

来源:互联网 发布:霸主软件官方正版 编辑:程序博客网 时间:2024/06/13 00:53

前言:最近在看Java框架Spring,里面提及了一些简单的概念,在这里总结一下。

1、POJO

POJO(Plain Old Java Object,简单Java对象)

POJO的含义:

其实就是一个遵循了最简单的设计规范的Java类:

1)有一些private的参数作为对象的属性,然后针对每一个参数定义get和set方法访问的接口。

2)没有从任何类继承、也没有实现任何接口,更没有被其它框架侵入的java对象。

3)可以有一些简单的运算属性在里面,但是不能有业务方法,不包含业务逻辑或持久逻辑(持久逻辑可以理解为可被序列化,从而可以从掉电丢失的内存中储存至磁盘或者其它存储介质中)。

来看一个POJO例子(摘自百度百科):

public class User {      //声明一些私有属性    private String name;      private int age;      //定义name和age的getter和setter方法    public String getName() {          return name;      }      public void setName(String name) {          this.name = name;      }      public int getAge() {          return age;      }      public void setAge(int age) {          this.age = age;      }  } 

POJO的意义就在于它的简单而灵活性,因为它的简单和灵活,使得POJO能够任意扩展(继续往后有介绍),从而胜任多个场合。

2、JavaBean

JavaBean (Java豆子?哈哈)是一种JAVA语言写成的可重用组件。同样的,JavaBean是符合一定规范编写的Java类。它的方法命名,构造及行为必须符合特定的约定:

1、所有属性为private。

2、这个类必须有一个公共的缺省构造函数。即是提供无参数的构造器。

3、这个类的属性使用getter和setter来访问,其他方法遵从标准命名规范。

4、这个类应是可序列化的。实现serializable接口。

因为这些要求主要是靠约定而不是靠实现接口,所以许多开发者把JavaBean看作遵从特定命名约定的POJO。

来看一个JavaBean例子(同样摘自百度):

public class UserInfo implements java.io.Serializable{      //实现serializable接口。     private static final long serialVersionUID = 1L;      private String name;      private int age;      //无参构造器      public UserInfo() {      }      public String getName() {          return name;      }      public void setName(String name) {          this.name = name;      }      public int getAge() {          return age;      }      public void setAge(int age) {          this.age = age;      }      //javabean当中可以有其它的方法      public void userInfoPrint(){          System.out.println("");      }  }  

从上面可以看出,一个JavaBean由3部分组成:
  
  (1) 属性(properties)
JavaBean提供了高层次的属性概念,属性在JavaBean中不只是传统的面向对象的概念里的属性,它同时还得到了属性读取和属性写入的API的支持。属性值可以通过调用适当的bean方法进行。

比如,可能bean有一个名字属性,这个属性的值可能需要调用String getName()方法读取,而写入属性值可能要需要调用void setName(String str)的方法。

每个JavaBean属性通常都应该遵循简单的方法命名规则。

  (2) 方法(method)
JavaBean中的方法就是通常的Java方法,它可以从其他组件或在脚本环境中调用。默认情况下,所有bean的公有方法都可以被外部调用,但bean一般只会引出其公有方法的一个子集。

  (3) 事件(event)
Bean与其他软件组件交流信息的主要方式是发送和接受事件。我们可以将bean的事件支持功能看作是集成电路中的输入输出引脚:工程师将引脚连接在一起组成系统,让组件进行通讯。有些引脚用于输入,有些引脚用于输出,相当于事件模型中的发送事件和接收事件。
  
由此可见,JavaBean确实也是普通的Java对象,只不过它遵循了一些特别的约定而已。大家针对这种规范,总结了很多开发技巧、工具函数。符合这种规范的类,可以被其它的程序员或者框架使用。

JavaBean与POJO的区别:

POJO其实是比JavaBean更纯净的简单类或接口。POJO严格地遵守简单对象的概念,而一些JavaBean中往往会封装一些简单逻辑。POJO的格式是用于数据的临时传递,它只能装载数据, 作为数据存储的载体,而不具有业务逻辑处理的能力。而Javabean虽然数据的获取与POJO一样,但是JavaBean当中可以有其它的方法。

3、DAO

DAO(data access objects,数据访问对象)
DAO一般有接口和该接口的实现类,接口用于规范实现类。实现类一般用于操作数据库,如对数据库进行修改、添加、删除等操作,一般直接调用公共类DAO。

与DAO相关的三个概念也应该是我们需要了解的:DTO(data transfer object)、VO(value object)PO(persistent object)、BO(business object)。

PO是指我们通过DAO来将POJO持久化。(将POJO保存起来哈哈)然后用PO组装出来VO、DTO。

在网上找了一个比如(脑袋炸了不想自己打比方哈哈):我们一张表有100个字段,那么对应的PO就有100个属性。但是我们界面上只要显示10个字段,客户端用WEBservice来获取数据,没有必要把整个PO对象传递到客户端,这时我们就可以用只有这10个属性的DTO来传递结果到客户端,这样也不会暴露服务端表结构.到达客户端以后,如果用这个对象来对应界面显示,那此时它的身份就转为VO。

最后还有一个BO,这是 POJO在业务层的体现,对于业务操作来说,更多的是从业务上来包装对象,如一个User的BO,可能包括name, age, sex, privilege, group等,这些属性在数据库中可能会在多张表中,因为每一张表对应一个PO,而我们的BO需要这些PO组合起来(或说重新拼装)才能成为业务上的一个完整对象。

4、EJB

EJB(Enterprise JavaBean),它是一组”功能”JavaBean的集合,通常是为了解决企业大型软件的面向服务开发难题(包括但不限于服务接口定义、服务间通信、事务控制、内容持久化等)开发了一套用于web环境专用的JavaBean,是一组构建企业级web应用的专用javaBean。

EJB是一套重量级的企业应用开发框架,使用者须遵循其规则开发具体业务逻辑。另外多说一句,SSM是轻量级的,所以我就在看其中的Spring哈哈。

原创粉丝点击