在互联网应用,尤其是在轻量级框架中,Bean 与 POJO 往往会在多处地方使用。除此之外,VO、PO、DO、BO、DTO、DAO 等概念也时有出现。

本篇文章主要讨论 Bean 与 POJO ,并不讨论其它方面的内容。


JavaBean 与 POJO

JavaBean 最初是由 Sun 公司提出的一种规范,主要包含以下要求:

  • 类是 public 的,并且有一个无参数的构造函数
  • 属性修饰符为:private,并通过 get 和 set 方法访问和修改
  • 实现 Serializable 接口
  • 对于事件,要使用 Swing 中处理监听器的方式

如果一个类符合了规范的要求,就可以方便的通过其它工具获取到这个类的信息。JavaBean 一开始是为了可视化编程而出现的,我们可以通过拖动的方式来绘制图形界面。但后来的事实证明 JavaBean 并没能在可视化编程方面大放异彩。

在实际企业开发中,需要满足可扩展、分布式 、事务处理、数据存储、安全性等要求,JavaBean 的规范已不能够满足这些要求。于是为了满足企业应用的要求,出现了 EJB(Enterprise JavaBean)。

最初的 EJB 有些笨重,为了一点点业务逻辑往往要添加许多无用的代码,于是 POJO (Plain Old Java Object) 应运而生。它没有从任何类继承、也没有实现任何接口,更没有被其它框架侵入的 Java 对象。

POJO 的概念与 JavaBean 的概念类似,但一般认为相比于 JavaBean,POJO 不需要实现 Serializable 接口,也不需要一定有无参构造器。在阿里巴巴Java开发手册中,POJO 专指只有 setter/getter/toString 的简单类,包括 DO/DTO/BO/VO 等。

JavaBean 与 POJO 示例:

class JavaBean implements Serializable {private static final long serialVersionUID = 1L;private String name;private String gender;public String getName() {return name;}public String getGender() {return gender;}public void setName(String name) {this.name = name;}public void setGender(String gender) {this.gender = gender;}
}class POJO {private String name;private String gender;public String getName() {return name;}public String getGender() {return gender;}public void setName(String name) {this.name = name;}public void setGender(String gender) {this.gender = gender;}
}

事实上,随着 EJB 版本的更新,EJB 也逐渐变得轻量化了,但此时市场已经广泛采用了 Spring,Spring 框架已经成为基于 POJO 的轻量级开发框架的领导者,再到后来,更轻量级的 Spring Boot 也出现了。可以看出轻量化、约定优于配置是现在互联网发展遵循的原则。


Spring Bean

在 Spring 中,Bean 是被 Spring IOC 容器初始化、配置和管理的对象。Spring Bean 通过配置文件或注解定义,在 Spring 容器中初始化,然后注入到应用程序中,称为控制反转(Inversion of Control)。控制反转的主要实现方式是依赖注入(Dependency Injection)。依赖注入一般可分为以下三种方式:

  • 构造器注入
  • setter注入(推荐)
  • 接口注入

将 Bean 注入到 IOC 容器之后,可以进行装配,装配的方式有以下两种:

  • XML装配
  • 注解装配(推荐)

使用依赖注入主要有如下优点:

  • 资源集中管理
  • 降低耦合度
  • 易于维护

无状态Bean与有状态Bean

  • 有状态Bean(Stateful Bean):含有自身状态信息,非线程安全,在 Spring 中采用单态 singleton
  • 无状态Bean(Stateless Bean):不含有自身状态信息,线程安全,在 Spring 中采用多态 prototype

Stateful Bean的例子如下:

class User {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}
}public class StatefulBean {public int state;// user含有能改变自身状态信息的方法,非线程安全public User user;public int getState() {return state;}public void setState(int state) {this.state = state;}public User getUser() {return user;}public void setUser(User user) {this.user = user;}
}

JavaBean 与 POJO相关推荐

  1. Javabean,POJO,PO,VO,DTO

    javabean:     在Java程序或JSP程序中,其实有很多的代码段是可以重复使用的,比如对数据库的操作.用户的有效性检查及某些项特定功能的实现等.为了很好的解决这个问题,提高开发效率,Sun ...

  2. JavaBean,POJO,EJB的区别

    JavaBean是标准的Java类,包括了属性,方法,事件,作用域是公共的目的是为了让所有的类都可以使用,有默认的无参构造,有默认的无参构造是为了通过框架的反射进行实例化,需要序列化实现Seriali ...

  3. javaBean,pojo与EJB的区别

    文章引自B站up,心静思远-9527 JavaBean 是一个标准的Java类,它包括属性.方法.事件, 它的作用域是公共的,目的是为了让所有类都可以使用: 有默认的无参构造,目的是为了可以通过框架反 ...

  4. JavaBean 和 pojo类区别

    一个实体类,定义了getter和setter方法,那它就属于pojo,即普通的JAVA对象.而如果在pojo类里面再实现Serializable序列化接口,那就是javabean了.pojo和java ...

  5. pojo java_什么是POJO,JavaBean?

    什么是POJO,JavaBean? 总结: POJO: 一个简单的Java类,这个类没有实现/继承任何特殊的java接口或者类,不遵循任何主要java模型,约定或者框架的java对象.在理想情况下,P ...

  6. POJO 与javaBean(普通bean和EJB)

    2010-09-27 16:27 POJO和JavaBean的区别和联系 POJO 和JavaBean是我们常见的两个关键字,一般容易混淆,POJO全称是Plain Ordinary Java Obj ...

  7. POJO JAVABEAN EJB的区别和联系

    POJO 和JavaBean是我们常见的两个关键字,一般容易混淆,POJO全称是Plain Ordinary Java Object / Pure Old Java Object,中文可以翻译成:普通 ...

  8. POJO、JavaBean和EJB的区别

    1.POJO(Plain Old Java Object) "Plain Old Java Object"的意思是"纯朴旧式的java对象",现在大家也称它作& ...

  9. POJO,PO,JAVABEAN

    POJO = pure old java object or plain ordinary java object or what ever. PO = persisent object 持久对象 就 ...

最新文章

  1. 文巾解题 1711. 大餐计数
  2. Oracle中table变量在JDBC中的运用
  3. Spring 管理Bean(获取Bean,初始化bean事件,自动匹配ByName······等)
  4. P2617-Dynamic Rankings【树套树】
  5. ARM不同位数系统int字节数区别
  6. 使用mysql索引的规则
  7. [深度学习-优化]梯度消失与梯度爆炸的原因以及解决方案
  8. mysql alert longtext_mysql数据类型介绍(含text,longtext,mediumtext说明)
  9. 月薪23333元!淘宝招募“首席鉴雕官”,只需天天哈哈哈哈哈
  10. 乌班图运行perl脚本
  11. Android 多语言切换
  12. axure能做剪切蒙版吗_***自动售货机能做吗
  13. 圣剑传说 玛娜传奇(Legend of Mana)(LOM)主原料取得方法
  14. php mud游戏源码,mud手游源码,mud安卓端源码,谁与争锋mud源码:关于MUD纯文字游戏架设(回答得好加分100)(开源mud游戏框架)-南开游戏网...
  15. 中国电子学会-青少年电子信息等级考试标准 (1-6 级)
  16. caffe源码分析--SyncedMemory 内存管理机制
  17. Mysql数据库 汉字转拼音全拼
  18. Windows server 2012 服务器挂载NAS盘
  19. 2022年中国航天发射列表(全年64发)
  20. Spring事务源码(一)

热门文章

  1. 记一次js逆向详细过程
  2. Swiper插件的使用和介绍
  3. 【AI测试】人工智能测试、算法测试整体介绍——第一部分
  4. 公有云与私有云的区别(转)
  5. npm/yarn 安装和命令
  6. mysql采集方式_数据采集的几种方法
  7. 疫苗行业薪酬增长率在生物医药领域最为突出;华为发布全场景智能光储解决方案;开利完成对广东积微集团的收购 | 美通社头条...
  8. 如何选择STL容器?
  9. 数组双指针和数组窗口
  10. 目标检测(三)传统目标检测与识别的特征提取——基于HOG特征的目标检测原理