JavaBean规范要求属性私有、getter/setter严格匹配命名、必须提供public无参构造器、保持纯数据载体定位、建议实现Serializable。

要让 JavaBean 真正符合规范,关键不是“写全方法”,而是从设计源头就守住封装边界——属性私有、访问受控、行为纯净、结构开放。
属性必须全部声明为 private
这是封装的起点,也是硬性门槛:
- 不允许用 public、protected 或包级默认权限暴露字段;哪怕只读或调试需要,也不能破例
- 推荐优先使用包装类型(如 Integer、Boolean),便于表达 null 语义,也兼容 JSON 序列化时的空值处理
- 避免 final 修饰非常量字段(如
private final String code;),否则 setter 失效,违反 JavaBean 可修改属性的基本定位
getter/setter 必须严格匹配命名与语义
工具和框架靠反射识别属性,名字错一个字母就可能失效:
- 普通字段(如
private String userName;)→getUserName()和setUserName(String userName) -
boolean 基本类型(如
private boolean enabled;)→ 推荐isEnabled()+setEnabled(boolean enabled) -
Boolean 包装类型(如
private Boolean visible;)→ 必须用getVisible(),不可用isVisible()(返回类型不匹配) - setter 内必须用
this.xxx = xxx;,防止形参遮蔽导致赋值失败
构造器要显式提供无参版本
这不是可选项,是框架运行的基础设施:
- 即使写了带参构造器(如
public User(String name, Integer age)),也必须手动写出public User() {} - 无参构造器不能是 private 或 protected,否则 Spring、Jackson 等无法通过反射实例化
- 可在无参构造中做轻量级初始化(如
this.status = "PENDING";),但不要触发外部调用或复杂逻辑
保持“纯数据载体”定位,不掺杂业务逻辑
JavaBean 的本质是数据契约,不是业务执行者:
- setter 里只做赋值,不校验、不日志、不发消息、不改其他字段状态
- getter 里只返回字段值,不计算、不查库、不触发副作用
- 若需校验,应交由外部机制处理:Spring Validation 注解(
@NotBlank)、DTO 验证器、或 Service 层统一拦截 - 序列化支持建议实现
Serializable,并显式声明private static final long serialVersionUID = 1L;
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











