POJO、Java Bean是如何定义的

2023-05-16

93ed8e6fab11a3f2c4bd63f750bd7dec.gif

之前介绍过DTO、PO、VO的转换,在日常开发中还有一些类经常被人叫做POJO,还有的人叫它们Java Bean。这些概念都是在特定场景下引入,用来表明它们的特性的。那这些称呼都是啥意思,有啥标准和特征呢?今天就来分享一下这些没用的知识。

POJO

POJOPlain Old Java Object 的简写,大概意思就是“淳朴的Java对象”。这个词是国外一家外包公司的员工创造的。哪些类是POJO类还是有说法的,需要同时满足以下几个条件:

  1. 不实现任何接口的类。

  2. 不继承任何其它类的类。

  3. 不使用任何外部注解的类。

这种类其实就是切断了和外界联系的Java类,下面这个类肯定不是:

@Data
public class Dog {
 private String name;
 private Integer age;
}

这个才是POJO

public class Dog {
 private String name;
 private Integer age;
}

Java Bean

Java Bean也经常出现在各种技术文献中,也不是随便什么类都能叫做Java Bean的,它需要有以下定义:

  • 有无参数构造。

  • 所有的属性必须是私有属性(private)。

  • 所有的属性必须有公共的(public)的GetterSetter

  • 它必须是可以被序列化的,也就是实现 java.io.Serializable接口。

按照这个定义,POJO类如果想成为Java Bean,需要改造成下面的形式:

import java.io.Serializable;

/**
 * @author felord.cn
 */
public class Dog implements Serializable {
    private static final long serialVersionUID = 6723564465081191620L;
    private String name;
    private Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

Spring Bean

既然说到这里了,不妨再说下Spring BeanSpring Bean的要求就低多了,只要这个类(接口)被注入了Spring IoC,那么这个类(接口)都可以被称作一个Spring Bean。至于一个类如何注入Spring IoC,这里就不说了,大家天天都在做。

最后

最后,我们可以得出结论,一个POJO总是孤孤单单的,它不可能成为一个Java Bean或者Spring Bean;但是Java Bean可以同时是一个Spring BeanSpring Bean也可以是一个Java Bean

8305283aabff1173df139b83f0d9c49f.gif

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

POJO、Java Bean是如何定义的 的相关文章

  • 上传进度条 Java Servlet?

    我想使用 servlet 显示上传进度条 我尝试过Ajax iFrame 技术 页面没有重新加载 文件也被上传 但是 进度条没有出现 有没有可用于 javaservlts 的 jQuery 进度插件 Thanks 我强烈推荐jQuery 上
  • Jackson JSON + Java 泛型

    我正在尝试将以下 JSON 反序列化 映射到List
  • Android:如何暂停和恢复可运行线程?

    我正在使用 postDelayed 可运行线程 当我按下按钮时 我需要暂停并恢复该线程 请任何人帮助我 这是我的主题 protected void animation music6 music4 postDelayed new Runnab
  • “源兼容性”和“目标兼容性”有什么区别?

    之间有什么关系 区别sourceCompatibility and targetCompatibility 当它们设置为不同的值时会发生什么 根据工具链和兼容性 https docs gradle org current userguide
  • 使用 proguard 混淆文件名

    我正在使用 proguard 和 Android Studio 混淆我的 apk 当我反编译我的apk时 我可以看到很多文件 例如aaa java aab java ETC 但我项目中的所有文件都有原始名称 有没有办法混淆我的项目的文件名
  • 非易失性领域的出版与阅读

    public class Factory private Singleton instance public Singleton getInstance Singleton res instance if res null synchron
  • 未装饰窗户的 Windows Snap 功能?

    有谁知道如何允许未装饰的窗户使用此功能 唯一的选择就是重新实施它 有任何想法吗 谢谢 可停靠可能是唯一的JToolBar http docs oracle com javase tutorial uiswing components too
  • Java中Gson、JsonElement、String比较

    好吧 我想知道这可能非常简单和愚蠢 但在与这种情况作斗争一段时间后 我不知道发生了什么 我正在使用 Gson 来处理一些 JSON 元素 在我的代码中的某个位置 我将 JsonObject 的 JsonElements 之一作为字符串获取
  • 将类转换为 JSONObject

    我有好几堂这样的课 我想将类转换为 JSONObject 格式 import java io Serializable import com google gson annotations SerializedName public cla
  • JAXB - 忽略元素

    有什么方法可以忽略 Jaxb 解析中的元素吗 我有一个很大的 XML 文件 如果我可以忽略其中一个大而复杂的元素 那么它的解析速度可能会快很多 如果它根本无法验证元素内容并解析文档的其余部分 即使该元素不正确 那就更好了 例如 这应该只生成
  • ThreeTen 向后移植与 JSR-310 的比较

    由于某些原因 我们现在无法使用 java 8 我们仍然停留在 java 7 上 不过 我想使用新的JSR 310 date time APIs现在 使用官方向后移植 ThreeTen http www threeten org threet
  • Mockito 和 Hamcrest:如何验证 Collection 参数的调用?

    我遇到了 Mockito 和 Hamcrest 的泛型问题 请假设以下界面 public interface Service void perform Collection
  • Android 认为我没有关闭数据库!为什么?

    我有一个 SQLiteDatabase 数据成员 我在 onCreate 中初始化它 并在 onPause onStop 和 onDestroy 中调用 close 它在 onResume 中重新初始化 它似乎运行得很好 但当我查看调试器时
  • UseCompressedOops JVM 标志有什么作用以及何时应该使用它?

    HotSpot JVM 标志是什么 XX UseCompressedOops我应该做什么以及什么时候使用它 在 64 位 Java 实例上使用它 与不使用它 时 我会看到什么样的性能和内存使用差异 去年大多数 HotSpot JVM 都默认
  • 使用 Proguard 通过 Dropbox.com 库混淆 Android 应用程序

    我刚刚创建了一个需要 Dropbox com API 库的 Android 应用程序 我现在尝试在 发布 模式下构建应用程序 并希望在代码上运行混淆器以对其进行混淆 但是 每当我尝试运行 Proguard 时 都会收到以下错误 Progua
  • 类更改(例如字段添加或删除)是否保持 Serialized 的向后兼容性?

    我有一个关于 Java 序列化的问题 在这种情况下 您可能需要修改可序列化类并保持向后兼容性 我有丰富的 C 经验 所以请允许我将 Java 与 NET 进行比较 在我的Java场景中 我需要使用Java的运行时序列化机制序列化一个对象 并
  • Java 8 Stream,获取头部和尾部

    Java 8 引入了Stream http download java net jdk8 docs api java util stream Stream html类似于 Scala 的类Stream http www scala lang
  • Tomcat 6 未从 WEB-INF/lib 加载 jar

    我正在尝试找出我的 tomcat 环境中的配置问题 我们的生产服务器正在运行 tomcat 安装并从共享 NFS 挂载读取战争 然而 当我尝试使用独立的盒子 及其配置 进行同样的战争时 我收到下面发布的错误 有趣的是 如果我将 WEB IN
  • Spring Data Rest 多对多 POST

    首先 让我解释一下我的用例 这非常简单 有一个用户实体和一个服务实体 我使用 UserService 作为连接实体 连接表 在用户和服务之间建立多对多关联最初 会有一些用户集和一些服务集 用户可以在任何时间点订阅任何服务 在这种情况下 将向
  • Selenium 单击在 Internet Explorer 11 上不起作用

    我尝试在 Internet Explorer 上单击 selenium 但它不起作用 我努力了element click moveToElement element click build perform javascript没事了 事实上

随机推荐

  • WPF、C# iconfont图标字体只显示框框

    在我们写C 或者WPF 程序的时候 xff0c 引入字体图标的时候 xff0c 新手会出现下面这个问题 xff1b 下面说下常见的两个原因吧 xff1a 1 是文件路径定义的不对 xff1a lt TextBlock Text 61 34
  • Linux执行curl报错:Protocol htttp not supported or disabled in libcurl

    因为公司最近要用到docker xff0c 在学习过程中 构建了一个简单web镜像 xff0c 用于测试 通过curl访问地址时 xff0c 报错 随便百度下 xff0c 也没看懂 仔细一看 xff0c 原来是http写成htttp了 所以
  • Android 获取应用信息—PackageManager

    Android 的应用管理主要是通过PackageManagerService来完成的 PackageManagerService服务负责各种APK包的安装 卸载 优化和查询 PackageManagerService在启动时会扫描所有的A
  • eclipse自动补全不生效解决方法

    eclipse有时候设置了自动补全 xff0c 但明明设置了自动补全却没生效的解决办法 xff0c 按照图片上标注序号一步步进入Advanced页面后 xff0c 勾选第四步的三项选项即可 xff0c 重新生效 xff0c 如下
  • 史上最全的C++面试宝典(合集)

    参考 xff1a https www runoob com cplusplus cpp tutorial html 本教程旨在提取最精炼 实用的C 43 43 面试知识点 xff0c 供读者快速学习及本人查阅复习所用 目录 第一章 C 43
  • 电脑主板,显卡,CPU天梯图

    17年6月主板天梯图 18年2月显卡天梯图 18年3月CPU天梯图
  • sqlserver 批量删除存储过程

    sqlserver 2005一次只能删除一个存储过程 xff0c 如果多了 xff0c 需要很长时间才能删完 xff0c 所以写了一段语句 xff0c 直接就把当然数据库下所有用户自定义的存储过程给drop了 不过使用都请留心 xff0c
  • win7开启wifi共享(热点)

    1 首先在电脑左下方搜索cmd xff0c 以管理员身份运行 输入命令 xff1a netsh wlan set hostednetwork mode 61 allow ssid 61 4Gtest key 61 12345678 ssid
  • Spring官方提供【CSRF攻击】解决方案

    步入正文 Cookie cookie是我们常见用来保存用户态信息 xff0c cookie跟随我们的请求自动携带 在同一域名下的请求 xff0c cookie总是自动携带 用户态 当前登入者的用户信息 以上的特性会导致一个潜在漏洞 CSRF
  • RocketMQ 一个topic 多个消费者只有一个消费的问题

    前言 很多时候 xff0c 我们会在多个地方同时订阅一个 topic xff0c 但是发现消费者只能执行一个后注册消费者会顶替之前注册的消费者 原因 在 subscribeTable 和 subscriptionInner 方法中 xff0
  • 如何快速学习一门新计算机语言

    本来想总结老师的方法的 xff0c 可在网上找到一篇一模一样的 xff0c 为了保证原创性 xff0c 所以只好直接引用啦 点击打开链接 如何快速学习一门新计算机语言
  • 福利抽奖 | 开源企业级监控Zabbix6.0都有哪些亮点

    Zabbix是企业级开源监控解决方案 xff0c 支持实时监控数万台服务器 虚拟机和网络设备 xff0c 采集百万级监控指标 xff0c 提供跨平台支持 Zabbix完全开源免费 xff0c 社区十分活跃 xff0c 生态建设良好 xff0
  • Git的一些常用概念

    git思维导图 Git工作区域 为了说明我们日常开发中执行的一系列Git命令的作用是什么 xff0c 我们需要了解Git的工作区域的概念 xff0c 几乎每一个常见的Git命令操作都可以通过工作区域来解释 Git本地有四个工作区域 xff1
  • 有没有完全自主的国产化数据库技术

    前段时间的俄乌冲突 xff0c Oracle 宣布 暂停在俄罗斯的所有业务 xff0c 相信大家的心情绝不是隔岸观火 xff0c 而是细思恐极 数据库号称 IT 领域三大核心之一 xff08 其他两个是 CPU 和操作系统 xff09 xf
  • 多个线程之间如何协同

    1 CountDownLatch 计数器 在多线程协作完成任务的时候 xff0c 有时候需要等待其他线程完成任务后 xff0c 主线程才能继续执行 xff0c 我们可以使用 Thread 类的 join 方法 xff0c 让主线程等待被 j
  • 利用Sharding-JDBC 实现Mysql读写分离

    为什么要读写分离 xff1f 读写分离则是将事务性的增 改 删操作在主库执行 xff0c 查询操作在从库执行 一般业务的写操作都是比较耗时 xff0c 为了避免写操作影响查询的效率 xff0c 可以使用读写分离 当然读写分离并不是万能的 x
  • 并发编程的核心问题

    并发编程并不是一项孤立存在的技术 xff0c 也不是脱离现实生活场景而提出的一项技术 相反 xff0c 并发编程是一项综合性的技术 xff0c 同时 xff0c 它与现实生活中 的场景有着紧密的联系 并发编程有三大核心问题 xff1a 分工
  • windows xp管理工具不见了怎么办

    管理工具其实是一个文件夹C ProgramData Microsoft Windows Start Menu Programs Administrative Tools 管理工具里的内容就是这个文件夹里的内容 xff0c 你的内容不见了 x
  • 分享搭建脚手架的一些经验

    印象中有些日子没有写文章了 xff0c 最近一直在放飞自我 xff0c 今天和大家分享的一些在搭建脚手架和编程中的一些实践原则 所有目标都是 清晰架构分层 使用统一的依赖管理 这种方式是基于我多年来的实践 最开始我也将项目类库及其版本随意的
  • POJO、Java Bean是如何定义的

    之前介绍过DTO PO VO的转换 xff0c 在日常开发中还有一些类经常被人叫做POJO xff0c 还有的人叫它们Java Bean 这些概念都是在特定场景下引入 xff0c 用来表明它们的特性的 那这些称呼都是啥意思 xff0c 有啥