JavaBean 与 POJO

在互联网应用,尤其是在轻量级框架中,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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值