1、POJO

POJO(Plain Old Java Object,简单Java对象),其实就是一个遵循了最简单的设计规范的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语言写成的可重用组件。同样的,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部分组成:

由此可见,JavaBean确实也是普通的Java对象,只不过它遵循了一些特别的约定而已。大家针对这种规范,总结了很多开发技巧、工具函数。符合这种规范的类,可以被其它的程序员或者框架使用。

JavaBean与POJO的区别:

POJO其实是比JavaBean更纯净的简单类或接口。

POJO严格地遵守简单对象的概念,而一些JavaBean中往往会封装一些简单逻辑。

POJO的格式是用于数据的临时传递,它只能装载数据,作为数据存储的载体,而不具有业务逻辑处理的能力。而Javabean虽然数据的获取与POJO一样,但是JavaBean当中可以有其它的方法。

3、DAO

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

与DAO相关的概念

  • PO:持久化对象 ---- Persistent Object

    一般与数据库中,表结构形成一一对应的映射关系。我们通过DAO来将POJO持久化,然后用PO组装出来VO、DTO。

  • VO:表现对象 ---- value object

    通常是Web向模板渲染引擎层传输的对象。再说白一点就是前端与后端交互的对象。

    后端返回前端:有时前端给后端传一个属性,后端要返回一堆的东西,这一堆东西又分布在很多张表里面,这时可以把需要返回的属性封装成一个vo类,返回给前端就可以了

    前端请求后端:前端请求后端接口,可能会传很多属性,比如注册页,多的有十几个属性,后端如果每个都单独接收,就太麻烦了,这时就把属性封装成一个vo类,所有的属性都在vo里面,后端只需要接收这个vo就可以了

  • DTO:数据传输对象 ---- data transfer object

    数据传输对象,Service向外传输的对象。

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

4、BO

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

5、EJB

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

EJB是一套重量级的企业应用开发框架,使用者须遵循其规则开发具体业务逻辑。

【Spring入门学习00】Bean、POJO、DAO、BO的概念相关推荐

  1. Spring入门学习手册 1:最简单的反转控制

    Spring入门学习手册 1:最简单的反转控制 一.什么是Javabean 看到的一个比较专业的解释是: JavaBean定义了一组规则 JavaBean就是遵循此规则的平常的Java对象 JavaB ...

  2. Spring 入门学习二之IOC

    今天来学习Spring ioc . 一.spring jar 包导入 在 spring 官网下载开发包 spring-framework-4.2.4.RELEASE,然后导入需要的 jar 包到项目 ...

  3. spring入门第二讲 bean的生命周期 装配方式 Spring整合Junit

    bean的生命周期 实体类 //初始化 public void init(){System.out.println("--初始化--"); }//销毁 public void de ...

  4. [Spring入门学习笔记][静态资源]

    遗留问题 在上一节课的作业中,我们一定遇到了一点问题--虽然将页面内容正确的返回给了浏览器,但是浏览器显示的样式却是不正确的,这是因为在HTML的\标签中我们这样引入了CSS资源: <link ...

  5. Spring基础学习笔记-Bean的基础知识

    一. Bean的定义,初始化,使用和销毁 二.ref指定依赖的三种模式 三.Bean的五种自动装配模式(autowire) 四.Bean依赖检查的4种模式:配合atuowire使用,dependenc ...

  6. spring入门学习导引

    从以下几个方面来简单的说一下个人对这两者的差别: ①springmvc使用更加的简便,更加的灵活,与spring的结合的更好. ②struts2相对来说比springmvc要重(哈哈  重也有重的好处 ...

  7. Spring入门学习手册 2:怎么用注解来DI/IOC

    目录 一.如果使用注解的话,在配置文件中应该做什么? 在beans标签后加上一个 <context:annotation-config/> 复制代码 标签来声明将要使用注解就可以了. &l ...

  8. Spring入门学习手册 6:Spring MVC基础中的基础

    目录 完整代码在这 一.获取请求参数 Spring获取请求参数非常简单,只要用到 @RequestParam 注解就可以了 如果不指定请求method的话,无论是get还是post参数都可以轻易获取到 ...

  9. [Spring入门学习笔记][Spring的AOP原理]

    AOP是什么? 面向切面编程 软件工程有一个基本原则叫做"关注点分离"(Concern Separation),通俗的理解就是不同的问题交给不同的部分去解决,每部分专注于解决自己的 ...

最新文章

  1. python实现平衡二叉树_LeetCode 110. 平衡二叉树 | Python
  2. 破纪录了!用 Python 实现自动扫雷!
  3. 华中农业大学Kenichi Tsuda团队诚聘植物-微生物互作、生物信息学博士后二名
  4. 科技部:学术不端零容忍!违规人员所获职称、奖金等全部清退归零
  5. 线性代数 第一章 行列式
  6. 菱形继承与菱形虚拟继承
  7. 使用Platform Builder配置Windows CE操作系统
  8. [十二省联考 2019] 异或粽子(可持久化字典树 + 二叉堆)
  9. 御用导航提示页面_UI网站导航设计知识与五个知识案例
  10. TCP/IP具体解释学习笔记——地址解析协议ARP
  11. CSU 1416 Practical Number
  12. [Ext JS 7 ]7.5 自适应配置 - Responsive Configs
  13. 50 岁的他笑谈码农真相,看完清醒了!| 人物志
  14. SQlite数据库的C编程接口(三) 预处理语句(Prepared Statements) ——《Using SQlite》读书笔记 .
  15. axture动画原型制作_AxureUX手机移动端交互原型通用模板精简版
  16. 推荐一份Web 工程师的前端书单
  17. python 过采样算法_类不平衡数据分类准确率的提升算法smote过采样方法
  18. PHP字符串解析函数
  19. html的日期插件标签,CaretTab - 新式可以显示时间和日期的标签
  20. Markdown设置图片大小

热门文章

  1. (十五)双边滤波Bilateral Filter
  2. Zblog博客怎么实现QQ登陆?
  3. 2018-11-16学习笔记 读论文Advantages of high quality SWIR bands for ocean colour processing: Examples from
  4. 浅谈《数学之美》①——自然语言处理
  5. scikit-learn机器学习 读书笔记(二)
  6. 前端H5项目部署到OSS-利用jenkins实现自动发布【生产环境实战】
  7. 主流开源流媒体服务器有哪些?
  8. 开源Star10K+数据库工具Beekeeper上手体验,免费够酷值得拥有
  9. 修改群名时服务器忙请重试,iOS修改群名称
  10. 什么是repo文件?